web-dev-qa-db-fra.com

Quelle est l'expression lambda équivalente pour System.out :: println

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?

22
Steve

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 utiliseriez
o->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.

39
Holger

C'est:

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

ou encore plus simple:

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