Most visited

Recently visited

Added in API level 24

Collector

public interface Collector

java.util.stream.Collector<T, A, R>


将输入元素累加到可变结果容器中的一个mutable reduction operation ,可选地在处理完所有输入元素后将累加结果转换为最终表示形式。 缩减操作可以按顺序执行也可以并行执行。

可变减少操作的例子包括:将元素累加到Collection ; 使用StringBuilder连接字符串; 计算关于总和,最小值,最大值或平均值等元素的摘要信息; 计算“数据透视表”摘要,例如“卖方最大价值交易”等。类Collectors提供了许多常见的可变缩减的实现。

Collector由四个函数指定,这四个函数一起工作以将条目累加到可变结果容器中,并且可以对结果进行可选的最终变换。 他们是:

收集器还具有一系列特性,例如 CONCURRENT ,它们提供了一些可用于缩减实施以提供更好性能的提示。

使用收集器连续执行缩减将使用供应商函数创建单个结果容器,并为每个输入元素调用一次累加器函数。 并行实现将对输入进行分区,为每个分区创建一个结果容器,将每个分区的内容累积到该分区的子结果中,然后使用合并器函数将子结果合并为合并结果。

为了确保顺序和并行执行产生等效的结果,集电极函数必须满足的 标识和一个 associativity个约束。

身份约束表示,对于任何部分累积结果,将其与空结果容器组合必须产生等效结果。 也就是说,对于部分累加结果a ,这是任何一系列累加器和组合器调用的结果, a必须等于combiner.apply(a, supplier.get())

关联约束表示分割计算必须产生一个等效的结果。 也就是说,对于任何输入元素t1t2 ,下面的计算中的结果r1r2必须是等效的:

A a1 = supplier.get();
     accumulator.accept(a1, t1);
     accumulator.accept(a1, t2);
     R r1 = finisher.apply(a1);  // result without splitting

     A a2 = supplier.get();
     accumulator.accept(a2, t1);
     A a3 = supplier.get();
     accumulator.accept(a3, t2);
     R r2 = finisher.apply(combiner.apply(a2, a3));  // result with splitting
  

对于不具备收藏UNORDERED特征,二累加结果a1a2是等价的,如果finisher.apply(a1).equals(finisher.apply(a2)) 对于无序的收藏家来说,放松等同是为了允许与秩序差异相关的不平等。 (例如,将元素累积到List的无序收集器会考虑两个相同的元素,如果它们包含相同的元素,则会忽略顺序。)

基于 Collector实施简化的 Collector (例如 collect(Collector) )必须遵守以下约束:

除了Collectors的预定义实现Collectors ,静态工厂方法of(Supplier, BiConsumer, BinaryOperator, Characteristics)可用于构建收集器。 例如,您可以创建一个收集器,通过以下方式将小部件累积到TreeSet中:

Collector<Widget, ?, TreeSet<Widget>> intoSet =
         Collector.of(TreeSet::new, TreeSet::add,
                      (left, right) -> { left.addAll(right); return left; });
 
(This behavior is also implemented by the predefined collector toCollection(Supplier)).

也可以看看:

Summary

Nested classes

枚举 Collector.Characteristics

指示Collector属性的特性,可用于优化缩减实现。

Public methods

abstract BiConsumer<A, T> accumulator()

将值折叠为可变结果容器的函数。

abstract Set<Collector.Characteristics> characteristics()

返回 SetCollector.Characteristics指示此收集器的特征。

abstract BinaryOperator<A> combiner()

接受两个部分结果并合并它们的函数。

abstract Function<A, R> finisher()

执行从中间累积类型 A到最终结果类型 R的最终 R

static <T, A, R> Collector<T, A, R> of(Supplier<A> supplier, BiConsumer<A, T> accumulator, BinaryOperator<A> combiner, Function<A, R> finisher, Characteristics... characteristics)

返回一个新 Collector由给定的描述 supplieraccumulatorcombiner ,并 finisher功能。

static <T, R> Collector<T, R, R> of(Supplier<R> supplier, BiConsumer<R, T> accumulator, BinaryOperator<R> combiner, Characteristics... characteristics)

返回一个新 Collector由给定的描述 supplieraccumulator ,并 combiner功能。

abstract Supplier<A> supplier()

一个创建并返回一个新的可变结果容器的函数。

Public methods

accumulator

Added in API level 24
BiConsumer<A, T> accumulator ()

将值折叠为可变结果容器的函数。

Returns
BiConsumer<A, T> a function which folds a value into a mutable result container

characteristics

Added in API level 24
Set<Collector.Characteristics> characteristics ()

返回SetCollector.Characteristics指示此收集器的特征。 这个集合应该是不可变的。

Returns
Set<Collector.Characteristics> an immutable set of collector characteristics

combiner

Added in API level 24
BinaryOperator<A> combiner ()

接受两个部分结果并合并它们的函数。 组合器函数可以将状态从一个参数折叠到另一个参数中并返回,或者返回一个新的结果容器。

Returns
BinaryOperator<A> a function which combines two partial results into a combined result

finisher

Added in API level 24
Function<A, R> finisher ()

执行从中间累积类型 A到最终结果类型 R的最终 R

如果设置了特征 IDENTITY_TRANSFORM则可以将该函数假定为具有从 AR的未检查转换的标识转换。

Returns
Function<A, R> a function which transforms the intermediate result to the final result

of

Added in API level 24
Collector<T, A, R> of (Supplier<A> supplier, 
                BiConsumer<A, T> accumulator, 
                BinaryOperator<A> combiner, 
                Function<A, R> finisher, 
                Characteristics... characteristics)

返回一个新 Collector由给定的描述 supplieraccumulatorcombiner ,并 finisher功能。

Parameters
supplier Supplier: The supplier function for the new collector
accumulator BiConsumer: The accumulator function for the new collector
combiner BinaryOperator: The combiner function for the new collector
finisher Function: The finisher function for the new collector
characteristics Characteristics: The collector characteristics for the new collector
Returns
Collector<T, A, R> the new Collector
Throws
NullPointerException if any argument is null

of

Added in API level 24
Collector<T, R, R> of (Supplier<R> supplier, 
                BiConsumer<R, T> accumulator, 
                BinaryOperator<R> combiner, 
                Characteristics... characteristics)

返回一个新Collector由给定的描述supplieraccumulator ,并combiner功能。 由此产生的Collector具有Collector.Characteristics.IDENTITY_FINISH特性。

Parameters
supplier Supplier: The supplier function for the new collector
accumulator BiConsumer: The accumulator function for the new collector
combiner BinaryOperator: The combiner function for the new collector
characteristics Characteristics: The collector characteristics for the new collector
Returns
Collector<T, R, R> the new Collector
Throws
NullPointerException if any argument is null

supplier

Added in API level 24
Supplier<A> supplier ()

一个创建并返回一个新的可变结果容器的函数。

Returns
Supplier<A> a function which returns a new, mutable result container

Hooray!