我有这段代码,但我不明白为什么会出现以下错误:
local variables referenced from a lambda expression must be final or effectively final
这是我的代码
public int firstMissingPositive(int[] nums) {
int k;
for (int i = 1;; i++) {
if (!Arrays.stream(nums).anyMatch(x -> x != i)) {
k = i;
break;
}
}
return k;
}
答案 0 :(得分:3)
由于i
并不是有效的最终定语(请参见i++
),因此必须在lambda表达式中使用它。
通过在循环内分配一个新的局部变量,很容易修复:
public int firstMissingPositive(int[] nums) {
int k;
for (int i = 1;; i++) {
final int j = i;
if (! Arrays.stream(nums).anyMatch(x -> x != j)) {
k = j;
break;
}
}
return k;
}