一尘不染

Java流映射和收集-生成容器的顺序

java

List<MyObject> myList = new ArrayList<>(); 
//populate myList here

List<String> nameList = myList.stream()
        .map(MyObject::getName)
        .collect(Collectors.toList());

在上面的代码中,我可以期望中的MyObject名称顺序nameList始终与中的顺序相同myList吗?


阅读 195

收藏
2020-12-03

共1个答案

一尘不染

是的,只要您没有将并行流显式转换为unordered()模式,即使您正在使用并行流,也可以期望这样做。

顺序永远不会在顺序模式下更改,但可能会在并行模式下更改。流变得无序:

  • 如果您通过unordered()调用将其明确转换为无序模式
  • 如果流源报告它是无序的(例如,HashSet流是无序的,因为顺序取决于实现,因此您不能依赖它)
  • 如果您使用的是无序终端操作(例如,进行forEach()操作或像一样收集到无序收集器toSet()

在您的情况下,这些条件均不满足,因此可以对您的流进行排序。

2020-12-03