我想处理XMLJava
对象中的列表。我必须确保处理所有元素,以便收到它们。
因此sequentia
l,stream
我应该使用它吗? list.stream().sequential().filter().forEach()
还是只要不使用并行性就足以使用流? list.stream().filter().forEach()
你在问错问题。你正在询问sequentialvs. parallel
而要按顺序处理项目,因此你必须询问订购。如果你有顺序的流并执行保证维持顺序的操作,则该流是并行处理还是顺序处理都没有关系;实施将维持秩序。
有序属性不同于并行与顺序。例如,如果你调用stream()
一个HashSet
同时调用流将是无序stream()
在List返回的有序流。请注意,你可以致电unordered()
以解除订购合同并可能提html" target="_blank">高性能。一旦流没有排序,就无法重新建立排序。(将无序流变成有序流的唯一方法是调用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());
整个操作可能会受益于并行执行,但是无论你使用并行流还是顺序流,结果列表始终会以正确的顺序排列。
我想在Java对象中处理列表。我必须确保处理所有的元素,以便我收到他们。 因此,我是否应该对我使用的每个调用? 或者,只要不使用并行性,只使用流就足够了吗?
以下代码正在为空的属性抛出NPE。class Person有属性:string:name,Integer:age,Integer:salary此处可以为空。我想创建一个工资列表。 在这里,我必须在结果列表中保留空值。null不能替换为0。
我试图从流中获取订单地图。我有下一个代码: 在这里,我尝试对数据流进行排序,我认为地图也是有序的。但我错了。我认为调用collect(Collectors.toMap())不会保存流的顺序。有我如何做到这一点的例子吗?
我已经讨论了一些相关问题,比如如何确保java8流中的处理顺序?,我仍然不完全清楚输出元素的顺序。因此,请澄清我的以下疑问。 我认为至少在理论上(或根据java规范),它可以按1、2、3、4、5、6、7、8以外的随机顺序打印。我说得对吗? 还有一个相关的问题——遭遇订单保存的决定是在执行的哪个点做出的?更准确地说,在执行开始之前,是否通过检查源、中间操作和终端操作的特性来评估整个流水线的订单特性?
假设您有一个第三方库,它公开了下一个接口。 代码无法编译,因为Function不知道如何处理由domap声明的CheckedException。我想出了两个可能的解决方案。 解决方案#1-包装调用 解决方案#2-编写实用程序方法
我知道,如果我们在消费者组中有多个分区和几乎相同数量的消费者,那么处理速度会加快。如果我们想保持事件的顺序并在收到每个事件时处理它,我们如何使用多个分区和消费者来实现这一点。 在我的用例中,按顺序处理事件非常关键,否则系统会崩溃。我想使用多个分区来增加并行性,但不知何故“让它们按顺序”。