带有ForEach迭代问题的Java流
我有两种类型的处理实现。不确定为什么stream forEach循环抱怨变量“i”必须是final。但如果是最终的,那么如何用计算“i”的逻辑来解决这个问题呢
public static void main(String[] args) {
String str = "123456789";
int i = 0;
//Non Stream
for (char c : str.toCharArray()) {
if (c >= 48 && c <= 57) {
i = i * 10 + (c - 48);
}
}
System.out.println(i);
i = 0;
// WHY compiler fails for variable 'i' here?
str.chars().forEach((c) -> {
if (c >= 48 && c <= 57) {
i = i * 10 + (c - 48);
}
});
System.out.println(i);
}
# 1 楼答案
可以用reduction替换
forEach
。例如:这里,
0
是初始值,lambda表达式计算新值a
是最新计算的结果,b
是流中的下一个元素。实际上,累加器保持在减速器内,而不是使用局部变量来跟踪(累积)最新计算