public static void main(String[] args) {
List<String> numList = Arrays.asList("1", "2", "3");
Holder holder = new Holder(0);
int i = 0;
numList.forEach(e -> {
if("1".equals(e)){
i++;
}
});
System.out.println(i);
}
在lambda表达式中要求变量i是final修饰,如果修饰为final,就不能对i进行++操作。
解决方式:
定义是Holder类,使用Holder中的value属性进行操作。
class Holder{
int value;
Holder(int value){
this.value = value;
}
}
public static void main(String[] args) {
List<String> numList = Arrays.asList("1", "2", "3");
Holder holder = new Holder(0);
numList.forEach(e -> {
if("1".equals(e)){
holder.value++;
}
});
System.out.println(holder.value);
}
参考: redis深度历险,优雅的使用Jedis。
本文介绍了一种在Java中使用Lambda表达式时遇到的问题及解决方案。具体来说,当需要在Lambda表达式中修改外部作用域内的变量时,该变量必须声明为final,但这又会阻止对该变量的修改。文章提供了一个通过创建辅助类来规避这一限制的方法。

416

被折叠的 条评论
为什么被折叠?



