为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2019-08-28 14:26:12
System.out :: println的等效lambda表达式是什么我偶然发现了以下使用方法参考的Java代码 System.out.printlnclass 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);         }     }}什么是等效的lambda表达式System.out::println?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

首先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));

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


查看完整回答
反对 回复 2019-08-28
?
千巷猫影

TA贡献1829条经验 获得超7个赞

它的 :

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

甚至更简单:

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


查看完整回答
反对 回复 2019-08-28
?
MMTTMM

TA贡献1869条经验 获得超4个赞

我确实理解了方法引用的调用目标when its declaration is first encountered,这对我来说是合乎逻辑的。但是有一个jls部分明确地说明了这一点(我真的试图找到它......)。如果调用目标是一个方法,那么可以捕获该方法,this例如,不是该方法返回的实际对象...据我所知。

查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 1672 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号