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.