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

时间:2015-01-19 11:15:48

标签: java lambda java-8 method-reference

我偶然发现了以下使用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的等效lambda表达式是什么?

2 个答案:

答案 0 :(得分:32)

方法引用System.out::println将首先评估System.out,然后创建捕获评估值的lambda表达式的等效项。通常,您可以使用
o->System.out.println(o)来实现与方法引用相同的操作,但每次调用该方法时,此lambda表达式都将评估System.out

所以完全等价物将是:

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

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

答案 1 :(得分:4)

是:

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

甚至更简单:

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