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

Lah*_*ima 41 java list java-8 java-stream

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

List<String> nameList = myList.stream()
        .map(MyObject::getName)
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

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

Tag*_*eev 55

是的,即使您使用并行流,只要您没有明确地将其转换为unordered()模式,您就可以期待这一点.

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

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

在您的情况下,没有满足这些条件,因此您的流被订购.