什么是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));