我该如何解决?

时间:2018-11-06 17:23:39

标签: java lambda java-8

我有这段代码,但我不明白为什么会出现以下错误:

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;
    }

1 个答案:

答案 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;
}