轉載 原文鏈接:https://blog.csdn.net/weixin_38883338/java/article/details/89195749
Java8在 lambda 表達式中使用局部變量會提示:Local variable flag defined in an enclosing scope must be final or effectively final
這是因為你使用的局部變量在初始化后,又對這個變量進行了賦值。賦值后會認為這個變量不是final了,所以報錯,針對這個問題可以有以下幾種解決辦法。
法一:
List<String> list = new ArrayList<String>();
list.add("name");
list.add("age");
list.add("address");
boolean flag = true;
flag = false;
boolean newFlag = flag;
list.stream().forEach(e -> {
if (newFlag) {
System.out.println(e);
}
});
即將你想要使用的局部變量,在使用前賦值給一個新的變量,這樣java8會認為這個新的變量是final,沒有變化的,可以使用。
法二:
List<String> list = new ArrayList<String>();
list.add("name");
list.add("age");
list.add("address");
boolean[] flag = {true};
flag[0] = false;
list.stream().forEach(e -> {
if (flag[0]) {
System.out.println(e);
}
});
將你需要的值放到一個數組里,也可以使用。
此外放到map或是list里都可以