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

时间:2015-05-15 11:38:07

标签: java list java-8 java-stream

animate

在上面的代码中,我可以预期List<MyObject> myList = new ArrayList<>(); //populate myList here List<String> nameList = myList.stream() .map(MyObject::getName) .collect(Collectors.toList()); MyObject个名称的顺序始终与nameList的顺序相同吗?

1 个答案:

答案 0 :(得分:52)

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

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

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

在您的情况下,这些条件均未满足,因此您的流已订购。