Java lambda-修改forEach循环中的值
我试着用lambdas实现类似的功能。然而,“我”必须是最终的Java lambda-修改forEach循环中的值,java,lambda,foreach,Java,Lambda,Foreach,我试着用lambdas实现类似的功能。然而,“我”必须是最终的 int i = 1; for (Object obj : list) { if (something) { i++; } } 编辑: 但是,如果我想添加,比方说,一个不同对象的值,该怎么办 int i = 1; for (Object obj : list) { if (something) { otherMethod(i); i += obj.getValue(); } } 您可以这
int i = 1;
for (Object obj : list) {
if (something) {
i++;
}
}
编辑:
但是,如果我想添加,比方说,一个不同对象的值,该怎么办
int i = 1;
for (Object obj : list) {
if (something) {
otherMethod(i);
i += obj.getValue();
}
}
您可以这样做:
int i = 1 + (int)list.stream().filter(something).count();
其中
something
是过滤的标准,正如在为计算元素而编写的第一个答案中一样,首先过滤,然后减少(使用count()
)
但是,如果不想计算项目,而是根据对象使用一些值,则应首先将流映射到中间值,并使用例如sum
来减少它们
list.stream()
.filter(obj -> something)
.mapToInt(obj -> obj.getValue())
.sum()
在使用流时,不应修改任何内容。(forEach
可能是个例外)。简短的回答是,如果你正在思考如何将功能风格与突变结合起来,这已经是一个致命的起点。谢谢你回答我的问题!但是如果我想添加,比如说,一个对象与另一个对象不同的值呢?那么你可以使用映射中间操作。你到底想实现什么?从每个对象提取某种类型的值?求和?是的,从列表中的每个对象中获取一个值并求和-确切地说,我想循环遍历列表,并在使用当前和调用另一个方法后,为每个条目添加sume。很抱歉,原来的问题不好-我编辑了它。处理流时应该避免副作用。能否显示otherMethod
的定义以及从getValue
返回的类型。
list.stream()
.filter(obj -> something)
.mapToInt(obj -> obj.getValue())
.sum()