Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我怎样才能避开这件事?_Java_Lambda_Java 8 - Fatal编程技术网

Java 我怎样才能避开这件事?

Java 我怎样才能避开这件事?,java,lambda,java-8,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(nu

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

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

因为
i
不是有效的final(请参见
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;
}

因为
i
不是有效的final(请参见
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;
}

如果键入从lambda表达式引用的局部变量必须是final或有效final或它的某些组合,则会显示多个副本。代码的性能非常差(O(n^2))。您可以通过对数组进行排序,或者构建一个查找到的值的
布尔值[]
,或者……来获得更好的性能。对于未来,请花一些时间为您的问题找到一个合理的标题。这是一个问答社区,所有内容都应该写出来,以帮助未来的读者。很少有未来的读者会发现我该如何避开这个问题?作为一个有用的起点…今天很抱歉。我会记住这一点。如果您键入从lambda表达式引用的局部变量必须是final或有效final或它的某种组合,那么就会显示多个副本。代码的性能非常差(O(n^2))。您可以通过对数组进行排序,或者构建一个查找到的值的
布尔值[]
,或者……来获得更好的性能。对于未来,请花一些时间为您的问题找到一个合理的标题。这是一个问答社区,所有内容都应该写出来,以帮助未来的读者。很少有未来的读者会发现我该如何避开这个问题?作为一个有用的起点…今天很抱歉。我会记住这一点。如果没有
j
right?@Deadpool Yes的final关键字,这也应该有效。即使没有关键字,它也是“有效的final”。听起来不错@Michaelthis也应该在没有final关键字的情况下为
j
工作,对吗?@Deadpool是的。即使没有关键词,这也是“有效的最终结果”。听起来不错@Michael