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

2022-08-31 16:12:29
List<MyObject> myList = new ArrayList<>(); 
//populate myList here

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

在上面的代码中,我可以期望名称的顺序总是与?MyObjectnameListmyList


答案 1

是的,即使您使用的是并行流,只要您没有将其显式转换为无序()模式,您也可以期望这一点。

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

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

在您的情况下,这些条件都不满足,因此您的流是有序的。


答案 2