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里都可以