System.out :: println的等效lambda表达式是什么

Ste*_*eve 20 java lambda java-8 method-reference

我偶然发现了以下使用方法参考的Java代码 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是等效的lambda表达式System.out::println

Hol*_*ger 37

首先System.out::println评估方法引用System.out,然后创建一个捕获评估值的lambda表达式的等价物.通常,您将使用
o->System.out.println(o)与方法引用相同的方法,但System.out每次调用方法时,此lambda表达式都将进行评估.

所以完全相同的是:

 PrintStream p = Objects.requireNonNull(System.out);
 numbers.forEach(o -> p.println(o));
Run Code Online (Sandbox Code Playgroud)

如果有人System.setOut(…);在中间调用,那将会产生影响.


Era*_*ran 5

它的 :

numbers.forEach(i -> {System.out.println(i);});
Run Code Online (Sandbox Code Playgroud)

甚至更简单:

numbers.forEach(i -> System.out.println(i));
Run Code Online (Sandbox Code Playgroud)