我偶然发现了以下使用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);
}
}
}
System.out::println
的等效lambda表达式是什么?
答案 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));