繁体   English   中英

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()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM