我正在尝试获取元素列表,对这些元素的一部分进行一些操作,并将这些操作的输出放入一个新列表中。我只想在列表中进行一次迭代。
我发现这样做的唯一方法是:
List<Integer> newList = numList.stream().reduce(new ArrayList<Integer>(),
(acc, value) -> {
if (value % 2 == 0) {
acc.add(value * 10);
}
return acc;
},
(l1, l2) -> {
l1.addAll(l2);
return l1;
}
);
如您所见,这非常麻烦。
我当然可以使用filter
then map
,但在这种情况下,我会迭代列表两次。
在其他语言(例如Javascript)中,这种reduce操作非常简单,例如:
arr.reduce((acc, value) => {
if (value % 2 == 0) {
acc.push(value * 10);
}
return acc;
}, new Array())
惊人!我在想,Java 是否有更好的 reduce 版本,或者我编写的 Java 代码是执行这种操作的最短方法。