我正在使用java 8流,并试图在forEach终端操作中修改对象内容。
我在这里面临的问题是,我能够修改List<Employee>对象内容,但不能修改List<Integer>的内容。
代码片段如下:
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对象的装箱,但不确定。
发布于 2018-11-01 10:10:06
您使用的不是Stream的最佳方法。一定要将Stream中的每一步看作已存在的修改(或创建新的)元素,并将其返回给Stream。最后,您将收到final结果,并且可以使用final方法之一来完成(并实际运行整个流工作) Stream
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);这里有初始数组。你想做以下工作:
final步骤);final步骤)。要做到这一点,您不必创建两次Streams。一定要用一个:
Stream.of(2, 4, 6, 8, 12, 17, 1234) // create stream (there're many way to do it)
.filter(v -> v % 2 == 0) // filter out required elements
.map(v -> v + 1) // transform elements using given rule
.forEach(System.out::println); // finalize stream with printing out each element separately注意: Stream.of(...)创建一个Stream,然后向流filter和map中添加两个步骤,然后向finalize或START创建具有forEach的流。
https://stackoverflow.com/questions/53098784
复制相似问题