with pass parameter method implement expressions example java lambda java-8 method-reference

pass - lambda expressions java 6



¿Cuál es la expresión lambda equivalente para System.out:: println (2)

Me topé con el siguiente código Java que usa una referencia de método para System.out.println

class SomeClass{ public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9); numbers.forEach(System.out::println); } } }

¿Cuál es la expresión lambda equivalente para System.out::println ?


Es:

numbers.forEach(i -> {System.out.println(i);});

o incluso más simple:

numbers.forEach(i -> System.out.println(i));


La referencia de método System.out::println evaluará primero System.out , luego creará el equivalente de una expresión lambda que capture el valor evaluado. Por lo general, usarías
o->System.out.println(o) para lograr lo mismo que la referencia del método, pero esta expresión lambda evaluará System.out cada vez que se llame al método.

Entonces un equivalente exacto sería:

PrintStream p = Objects.requireNonNull(System.out); numbers.forEach(o -> p.println(o));

lo que hará la diferencia si alguien invoca System.setOut(…); entre.