-1

首先断言顺序 == !parallel

Java-8Stream接口提供了两种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方法?
  • 来自库的现有方法?

或者不一定是顺序收集器,而是具有严格从左到右组合器的并行方法。

事实上,正确的关键字应该是Folding Collector

4

1 回答 1

3

您不需要顺序收集器,而是折叠收集器。这个收集器甚至可以使用并行流并行执行上游操作,然后严格减少从左到右的forEachOrdered()操作。不幸的是,当前的 Stream API 不支持有序收集器。我在 core-libs-dev 中简短讨论了添加特殊特性的可能性,这将表明收集器不支持组合,但是在 Java-9 中这个方向仍然没有进展。

于 2016-01-29T12:12:01.507 回答