修改lambda内部的局部变量 [英] Modifying local variable from inside lambda
本文介绍了修改lambda内部的局部变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
修改 forEach
中的局部变量会产生编译错误:
Modifying a local variable in forEach
gives a compile error:
正常
int ordinal = 0;
for (Example s : list) {
s.setOrdinal(ordinal);
ordinal++;
}
使用Lambda
int ordinal = 0;
list.forEach(s -> {
s.setOrdinal(ordinal);
ordinal++;
});
知道怎么解决这个问题吗?
Any idea how to resolve this?
推荐答案
使用包装器
使用 Java 8 + :
AtomicInteger ordinal = new AtomicInteger(0);
list.forEach(s -> {
s.setOrdinal(ordinal.getAndIncrement());
});
Java 10 + :
var wrapper = new Object(){ int ordinal = 0; };
list.forEach(s -> {
s.setOrdinal(wrapper.ordinal++);
});
这篇关于修改lambda内部的局部变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文