Je suis tombé sur le code Java Java qui utilise une référence de méthode pour 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);
}
}
}
Quelle est l'expression lambda équivalente pour System.out::println
?
La référence de méthode System.out::println
Évaluera d'abord System.out
, Puis créera l'équivalent d'une expression lambda qui capture la valeur évaluée. Habituellement, vous utiliseriezo->System.out.println(o)
pour obtenir la même chose que la référence de méthode, mais cette expression lambda évaluera System.out
à chaque fois que la méthode sera appelée.
Un équivalent exact serait donc:
PrintStream p = Objects.requireNonNull(System.out);
numbers.forEach(o -> p.println(o));
ce qui fera une différence si quelqu'un invoque System.setOut(…);
entre les deux.
C'est:
numbers.forEach(i -> {System.out.println(i);});
ou encore plus simple:
numbers.forEach(i -> System.out.println(i));