【发布时间】:2017-11-04 01:09:00
【问题描述】:
我想知道是否可以使用流来调用列表中每个元素的函数并修改它的值。
假设我有一个整数列表:List<Integer> list = Arrays.asList(1,2,3);
还有一种将每个数字加一的方法:
public static Integer plusOne(Integer n){
return n + 1;
}
这是我用来在每个元素上调用函数并修改原始列表的:
for (int i = 0; i < list.size(); i++){
list.set(i, plusOne(list.get(i)));
}
但是,我想知道是否有更短的方法可以使用流来编写它?
我尝试使用:
list.stream()
.forEach(e -> plusOne(e));
但它似乎并没有改变原始列表,也没有返回任何东西......如果使用流无法更改原始列表,我怎样才能至少获得列表的新修改副本?
顺便说一下,在调用列表上的函数后,输出应该是(2,3,4)的列表。
【问题讨论】:
-
改用
map -
改变你在流中迭代的集合似乎是一个非常糟糕的主意。您最好使用更新后的值生成一个新的
List。 -
流的众多好处之一是它不鼓励改变数据结构。
标签: java arrays list functional-programming java-stream