【发布时间】:2015-07-25 10:01:39
【问题描述】:
可以像这样链接/连接对 lambda 表达式中的元素所做的操作:
list.forEach(s -> {
System.out.println(s.toLowerCase());
System.out.println(s.toUpperCase());
});
有没有办法通过方法引用来做到这一点?像这样的:
list.forEach({
System.out::println(String::toLowerCase);
System.out::println(String::toCase);
});
我知道我可以在四个单独的调用中执行此操作(还可以执行更多操作,即改变值):
list.replaceAll(String::toLowerCase);
list.forEach(System.out::println);
list.replaceAll(String::toUpperCase);
list.forEach(System.out::println);
我什至不能做这样简单的事情:
list.forEach({
System.out::println;
System.out::println;
});
【问题讨论】:
-
方法引用是一个表达式,它产生一个引用类型的值并且没有副作用。显然,尝试将这样的表达式用作块中的语句是没有意义的。老实说,我不知道你为什么想要那个——你只是喜欢在你的代码中看到一个双冒号而不是一个点吗?
-
这不都是关于糖的吗?)Oracle MOOC 中说过要尽可能多地使用方法引用。但是看看这带来的复杂性我不会 - 只是它使代码更具可读性。
标签: java lambda java-8 method-reference