慕瓜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());整个操作可能从并行执行中受益,但结果列表将始终保持正确的顺序,而不管您使用的是并行流还是顺序流。