我正在尝试将java8 forEach循环中的布尔变量更改为true,这是非final.但是我遇到了以下错误:在封闭范围内定义的局部变量必须是最终的或有效的最终.
如何解决此错误?
代码:
boolean required = false;
这是我在函数中创建的变量.
现在,当我试图改变它时:
map.forEach((key, value) -> {
System.out.println("Key : " + key + " Value : " + value);
required = true;
});
我收到错误:在封闭范围内定义的局部变量必须是最终的或有效的最终.
为什么会出现此错误以及如何解决?
解决方法:
您无法从lambda表达式的主体更改局部变量.有几种方法可以解决这个问题:
>在这种特殊情况下,你可以设置boolean required =!map.isEmpty();没有任何lambda表达式.如果要根据某些条件进行设置,可以使用Stream API:
boolean required = map.entrySet().stream().anyMatch(entry -> ...);
该解决方案是最优选的.
>将所需变量转换为封闭类的字段.
>最脏的方法:声明一个单元素数组:boolean [] required = {false};并设置此元素:required [0] = true;
标签:java,java-8,lambda
来源: https://codeday.me/bug/20191001/1838030.html