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

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

我想在XMLJava对象。我必须确保处理所有的元素,以便我收到它们。

因此,我应该打电话给你吗?sequential每一个stream我用?list.stream().sequential().filter().forEach()

还是只要我不使用并行性,就只使用流就足够了?list.stream().filter().forEach()


慕神8447489
浏览 998回答 3
3回答

慕码人2483693

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

交互式爱情

list.stream().序贯().filter().forEach()将始终按照列表本身的顺序处理列表。但是如果我们用list.stream().并行()那么其余的操作都不能保证订单。

守着星空守着你

这取决于实际的集合类型。SetS通常不会,除非它是SortedSet或LinkedHashSet..的集合视图。Map&nbsp;(keySet(),&nbsp;entrySet(),和values())继承Map的策略,即当地图是SortedMap或LinkedHashMap..的行为是由报告的特征决定的。集合分配器..这个default执行Collection不报告ORDERED特征,所以它是无序的,除非被覆盖。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java