如何在Lambda表达式中使用数组?代码举例讲解

Lambda 表达式可以访问外部作用域中的数组,但是也有一定的限制:

  1. Lambda 表达式不能修改数组的长度。
    例如:
int[] arr = {1, 2, 3};
Consumer<Integer> consumer = (x) -> arr.length = 5; // 错误,不能修改数组长度
  1. Lambda 表达式可以读取和修改数组中的元素。
    例如:
int[] arr = {1, 2, 3};
Consumer<Integer> consumer = (x) -> arr[0] = x; // 可以修改数组元素
Function<Integer, Integer> function = (x) -> arr[0]; // 可以读取数组元素
  1. Lambda 表达式对数组元素的修改影响外部数组。
    例如:
int[] arr = {1, 2, 3};
Consumer<Integer> consumer = (x) -> arr[0] = x;
consumer.accept(5);
System.out.println(arr[0]); // 5

这里 Lambda 表达式修改了数组元素,这同样影响到了外部数组。

  1. Lambda 表达式读取数组时,访问的是创建 Lambda 表达式时的数组元素。
    例如:
int[] arr = {1, 2, 3};  
Function<Integer, Integer> function = (x) -> arr[0];
arr[0] = 5;
int result = function.apply(1); // 1

这里 Lambda 表达式读取数组元素时,arr[0] 为 1,而不是 5。因为它访问的是创建 Lambda 表达式时的数组元素。

总之,Lambda 表达式可以方便地访问外部数组,但是我们需要清楚地理解Lambda 表达式对数组的限制,不可修改数组长度,读取数组时访问的是创建 Lambda 表达式时的元素,修改数组会影响到外部数组。