当前位置: 首页 > 面试题库 >

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

贺自明
2023-03-14
问题内容
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()

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



 类似资料:
  • 假设你有一张这样的物体地图(尽管想象它更大): rtype=133,有两个! 我想对Streams做的是这样的: 我在理解Collectors&groupBy的工作原理时遇到了一些麻烦,但我想这可能会用于本例。 在Java streams API中进行编码的正确方法是什么? 我很难找到类似的地图例子(人们在他们的例子中更多地使用列表)

  • 我有一个<code>Person<code>对象的集合:。 (实体结构由第三方提供。 现在,我需要一张

  • 我有这个代码: 它产生的是 很高兴我应该如何写映射方法来得到一个地图,它会给我:

  • 它应该会返回一张地图。这个映射的键应该是字符串“transaction”和“transition”,映射的值应该是SNP对象的列表。“过渡”指的是两个阶段之间的变化 我应该如何制作这两个过滤器? SNP类

  • 我想获取地图的值,找到min值,并为地图的每个条目构造一个新的CodesWitMinValue实例。我希望使用Java11个流,我可以在多行中使用多个流(一个用于min值,一个用于转换)来实现这一点。是否可以使用java 11流和收集器在单行中实现?谢谢。