【发布时间】:2020-10-21 07:54:02
【问题描述】:
我正在阅读一些关于迭代器、枚举等的信息。所以我测试了一些代码来检查所有内容。
第一个例子:
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);
此代码产生正确且预期的输出:
Exception in thread "main" java.util.ConcurrentModificationException
但是当我测试相同的代码时只做了 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);
结果是:
5
2
3
我的主要目的是了解:
- 为什么会这样?
- 什么魔法使只有一个
stream()方法? - 使用
stream().iterator的优缺点是什么?
【问题讨论】:
标签: java arraylist java-8 iterator java-stream