修改在lambda的范围内定义的数组

时间:2018-10-18 18:22:15

标签: java arrays lambda java-8

我有以下代码,它正确地拒绝编译并出现错误在封闭范围内定义的局部变量numberArray必须是最终的或实际上是最终的

InputReader reader = new InputReader(System.in);
int numInputs = reader.nextInt();
int[] numberArray = new int[numInputs];

IntStream.range(0, numInputs).forEach(i -> {
    numberArray[i] = reader.nextInt();
});

但是,这段代码可以编译并正常工作,尽管在这里我基本上也做同样的事情,在lambda中修改了 inputArray

public int[] reverse(int[] inputArray) {
    IntStream.range(0, inputArray.length/2).forEach(i-> {
        int temp = inputArray[i];
        inputArray[i] = inputArray[inputArray.length-1-i];
        inputArray[inputArray.length-1-i] = temp;
    });
    return inputArray;
}

知道为什么存在这种差异吗?

1 个答案:

答案 0 :(得分:2)

请确保循环后没有更改numberArray。在那种情况下,它不会被认为是有效的最终解决方案。

numberArray = ...