Java 流映射和收集 - 结果容器的顺序
Java stream map and collect - order of resulting container
List<MyObject> myList = new ArrayList<>();
//populate myList here
List<String> nameList = myList.stream()
.map(MyObject::getName)
.collect(Collectors.toList());
在上面的代码中,我可以期望 MyObject
名称在 nameList
中的顺序始终与 myList
的顺序相同吗?
是的,即使您使用的是并行流,只要您没有明确地将其转换为 unordered()
模式,您也可以期待这一点。
顺序在顺序模式下永远不会改变,但在并行模式下可能会改变。流变得无序:
- 如果您通过
unordered()
调用 显式将其转换为无序模式
- 如果流源报告它是无序的(例如,
HashSet
流是无序的,因为顺序取决于实现,您不能依赖它)
- 如果您正在使用无序终端操作(例如,
forEach()
操作或收集到像toSet()
这样的无序收集器)
在你的情况下 none 这些条件都满足了,因此你的流被订购了。
List<MyObject> myList = new ArrayList<>();
//populate myList here
List<String> nameList = myList.stream()
.map(MyObject::getName)
.collect(Collectors.toList());
在上面的代码中,我可以期望 MyObject
名称在 nameList
中的顺序始终与 myList
的顺序相同吗?
是的,即使您使用的是并行流,只要您没有明确地将其转换为 unordered()
模式,您也可以期待这一点。
顺序在顺序模式下永远不会改变,但在并行模式下可能会改变。流变得无序:
- 如果您通过
unordered()
调用 显式将其转换为无序模式
- 如果流源报告它是无序的(例如,
HashSet
流是无序的,因为顺序取决于实现,您不能依赖它) - 如果您正在使用无序终端操作(例如,
forEach()
操作或收集到像toSet()
这样的无序收集器)
在你的情况下 none 这些条件都满足了,因此你的流被订购了。