【发布时间】:2018-11-01 09:50:41
【问题描述】:
我正在使用 java 8 流并尝试在 forEach 终端操作中修改对象内容。
我在这里面临的问题是我可以修改List<Employee> 对象的内容,但不能修改List<Integer> 的内容
sn-p代码如下:
public static void streamExample() {
List<Employee> listEmp = Arrays.asList(new Employee());
listEmp.stream().forEach(a -> a.setEmptName("John Doe"));
listEmp.stream().forEach(System.out::println);
List<Integer> listInteger = Arrays.asList(2, 4, 6, 8, 12,17, 1234);
listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a=a+1);
listInteger.stream().forEach(System.out::println);
}
我想知道更改没有反映在列表中,因为在执行 a=a+1 操作时取消装箱 Integer 对象但不确定。
【问题讨论】:
-
这与元素类型无关。像
forEach(a -> a=a+1)这样的操作永远不会有意义,因为您只是在修改参数a。在 Java 中,修改参数变量对调用者没有影响。此原则也称为“按值传递”。
标签: java java-8 java-stream