我已经将列表从
0-9(整数)
定义如下:List<Integer> list =
IntStream.range(0, 10)
.boxed()
.collect(Collectors.toCollection(ArrayList::new));
当我尝试使用以下代码删除元素时:
list.stream()
.peek(list::remove)
.forEach(System.out::println);
应该抛出 ConcurrentModificationException
,但有趣的是它对某些元素起作用,并给出以下输出(在最后抛出异常并删除了一些元素):
0
2
4
6
8
null
null
null
null
null
Exception in thread "main" java.util.ConcurrentModificationException
但是,如果我像下面这样添加了sorted()
:
list.stream()
.sorted()
.peek(list::remove)
.forEach(System.out::println);
这完美地运行并且删除了所有元素,我不明白为什么stream
会以这种方式表现。
.parallel()
的特性时,它的行为完全不同,所以我猜我们在使用stream
时应该避免删除元素,因为不能修改支持集合。 - Nitesh Virani0
后,下一个元素是2
。每个偶数元素都被移除,奇数元素向上移动列表。 - Has QUIT--Anony-Mousse