首先断言顺序==!parallel
Java-8 Stream
接口提供了两种collect
方法:
<R> R collect(Supplier<R> supplier,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);
<R, A> R collect(Collector<? super T, A, R> collector);
我需要一个收集器,它按顺序收集(或可变地减少)元素(用例:多个地图(元素可以是地图,递归)合并,订购相关)。组合器不是必需的(Collectors.of
方法也需要组合器)。有没有更好的方式以某种方式明确地做到这一点?
Collector
?of
方法,没有合并器参数?或不一定是顺序收集器,而是采用严格从左到右合并器的并行方法。
确实,正确的关键字应为 折叠收藏家 。
答案 0 :(得分:2)
您不需要顺序收集器,而是折叠收集器。即使并行流并行执行上游操作,此收集器也可以工作,然后严格按照forEachOrdered()
从左到右进行减少。不幸的是,当前的Stream API不支持有序的收集器。我在core-libs-dev中有一个short discussion关于添加特殊特征的可能性,这将表明收集器不支持组合,但在Java-9中这方面仍然没有进展。