什么是System.out :: println的等效lambdaexpression式

我偶然发现了以下使用System.out.println的方法引用的Java代码

 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); } } } 

System.out::println的等效lambdaexpression式是什么?

方法引用System.out::println将首先评估System.out ,然后创build一个捕获评估值的lambdaexpression式的等价物。 通常,你会使用
o->System.out.println(o)实现与方法引用相同,但是这个lambdaexpression式将在每次调用方法时评估System.out

所以一个确切的等价物将是:

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

这将有所作为,如果有人调用System.setOut(…); 在两者之间。

它的 :

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

甚至更简单:

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