如何显式使用顺序收集器

时间:2016-01-29 10:42:50

标签: java-8 java-stream collectors

首先断言顺序==!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方法,没有合并器参数?
  • 来自lib的现有方法?

不一定是顺序收集器,而是采用严格从左到右合并器的并行方法。

确实,正确的关键字应为 折叠收藏家

1 个答案:

答案 0 :(得分:2)

您不需要顺序收集器,而是折叠收集器。即使并行流并行执行上游操作,此收集器也可以工作,然后严格按照forEachOrdered()从左到右进行减少。不幸的是,当前的Stream API不支持有序的收集器。我在core-libs-dev中有一个short discussion关于添加特殊特征的可能性,这将表明收集器不支持组合,但在Java-9中这方面仍然没有进展。