为了账号安全,请及时绑定邮箱和手机立即绑定

Java8 unordered() 无序化无效

Java8 unordered() 无序化无效

蛊毒传说 2019-02-06 12:48:15
Java8 unordered()无序化无效, 多次运行结果还是与流中元素顺序一致// 多次运行结果: 5, 1, 2, 6, 3, 7, 4 没有达到无序的效果Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().forEach(System.out::println);求大神指教相关代码     /**      * S unordered(); 产生一个与当前流中元素相同的无序流, 当流本身就是无序或流已经无序, 会返回流本身      */     @Test     public void unorderedTest() {         Stream.of(5, 1, 2, 6, 3, 7, 4).forEach(System.out::println);                 // 多次运行结果: 5, 1, 2, 6, 3, 7, 4 没有达到无序的效果 TODO         Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().forEach(System.out::println);     }
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

unordered()操作不会执行任何操作来显式地对流进行排序。它的作用是消除了流必须保持有序的约束,从而允许后续操作使用不必考虑排序的优化。

您可以在Java 8文档中阅读此内容:

对于顺序流,顺序的存在与否不会影响性能,只影响确定性。如果流是顺序的,则在相同的源上重复执行相同的流管道将产生相同的结果;
如果是非顺序流,重复执行可能会产生不同的结果。 对于并行流,放宽排序约束有时可以实现更高效的执行。 ...

在流有序时, 但用户不特别关心该顺序的情况下,使用 unordered 明确地对流进行去除有序约束可以改善某些有状态或终端操作的并行性能。

可以比较下面的结果

   Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().forEach(System.out::println);   Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().parallel().forEach(System.out::println);


查看完整回答
反对 回复 2019-02-06
  • 1 回答
  • 0 关注
  • 848 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信