java8 乱序_如何确保java 8流中的处理顺序?

5a4daa086f89590c67f07fa7fec52918.png

慕瓜9086354

你问错问题了。你在问sequentialv.V.parallel而您想要处理项有条不紊所以你得问问定序..如果你有有序流并执行保证保持顺序的操作,无论流是并行处理还是顺序处理,实现都将维持顺序。有序性不同于并行性和顺序性。如果你打电话stream()在.上HashSet调用时,流将无序。stream()在.上List返回有序流。请注意,您可以调用unordered()释放订单合同,并可能提高性能。一旦流没有排序,就无法重新建立排序。(将无序流转换为有序流的唯一方法是调用sorted但是,产生的顺序不一定是原始顺序)。另见“订购”部分.的.java.util.stream包装文件.为了确保在整个流操作中对订单进行维护,您必须研究流的源、所有中间操作和终端操作的文档,以确定它们是否维持订单(或者源最初是否有订单)。这可能是非常微妙的。Stream.iterate(T,UnaryOperator)创建有序流Stream.generate(Supplier)创建无序溪流。请注意,在您的问题中,您也犯了一个常见的错误:forEach 不维持秩序。你必须用forEachOrdered如果要以保证的顺序处理流的元素,请执行以下操作。所以如果你list在你的问题中确实是java.util.List,其stream()方法将返回有序溪流filter不会改变订单。所以如果你打电话list.stream().filter() .forEachOrdered(),则所有元素将按顺序处理,而list.parallelStream().filter().forEachOrdered()可以并行地处理元素(例如,由过滤器处理),但仍将按顺序调用终端操作(这显然将减少并行执行的好处)。例如,如果您使用以下操作List result=inputList.parallelStream().map(…).filter(…).collect(Collectors.toList());整个操作可能从并行执行中受益,但结果列表将始终保持正确的顺序,而不管您使用的是并行流还是顺序流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值