【发布时间】:2016-07-11 08:38:16
【问题描述】:
我想用 Java 8 编写纯函数,它将一个集合作为参数,对该集合的每个对象应用一些更改,并在更新后返回一个新集合。我想遵循 FP 原则,所以我不想更新/修改作为参数传递的集合。
有没有什么方法可以用 Stream API 做到这一点,而无需先创建原始集合的副本(然后使用 forEach 或“正常”for 循环)?
下面的示例对象,假设我想将文本附加到对象属性之一:
public class SampleDTO {
private String text;
}
所以我想做类似于下面的事情,但不修改集合。假设“列表”是List<SampleDTO>。
list.forEach(s -> {
s.setText(s.getText()+"xxx");
});
【问题讨论】:
-
我想说这确实有点违背函数式编程的原则。这个想法不是改变状态,而是创建新状态作为函数的产物。这就是为什么您应该使用 Java 流 API 提供的
map函数来创建新列表,而不是改变原始列表。
标签: java java-8 java-stream