小编Ant*_*aaa的帖子

Java:为什么在使用 Stream+Iterator 时不会发生 ConcurrentModificationException?

我正在阅读一些关于迭代器、枚举等的信息。所以我测试了一些代码来检查所有内容。

第一个例子:

List<String> list = new ArrayList<>();
list.add("5");
list.add("1");
list.add("2");
list.add("3");
Iterator<String> iterator = list.iterator();
list.remove("1");
iterator.forEachRemaining(System.out::println);
Run Code Online (Sandbox Code Playgroud)

此代码生成正确和预期的输出:

Exception in thread "main" java.util.ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)

但是当我测试相同的代码时,只有 1 个更改 list.iterator()->list.stream().iterator()

List<String> list = new ArrayList<>();
list.add("5");
list.add("1");
list.add("2");
list.add("3");
Iterator<String> iterator = list.stream().iterator();
list.remove("1");
iterator.forEachRemaining(System.out::println);
Run Code Online (Sandbox Code Playgroud)

结果是:

5
2
3
Run Code Online (Sandbox Code Playgroud)

我的主要目的是了解:

  1. 为什么会发生这种情况?
  2. 什么魔法只产生一种stream()方法?
  3. 使用的优点和缺点是stream().iterator什么?

java iterator arraylist java-8 java-stream

4
推荐指数
1
解决办法
111
查看次数

标签 统计

arraylist ×1

iterator ×1

java ×1

java-8 ×1

java-stream ×1