【发布时间】:2019-01-16 14:00:11
【问题描述】:
请考虑下面的代码 sn-p。
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
List<String> copyList = new ArrayList<String>();
Consumer<String> consumer = s->copyList.add(s);
list.stream().forEach(consumer);
由于我们使用 lambda 表达式,根据函数式编程(纯函数),它应该只计算输入并提供相应的输出。
但在示例中,它试图将元素添加到既不是输入也不是在 lambda 范围内声明的列表中。
我的意思是,这是一个好的做法,会导致任何副作用吗?
【问题讨论】:
-
最后几行可以重构为
list.stream().forEach(copyList::add); -
forEach从来都不是纯粹的函数式,因为没有副作用它不会对流做任何事情。这适用于 Scheme 中的for-each,JS 中的Array.forEach,...
标签: java java-8 functional-programming