public interface Collector
java.util.stream.Collector<T, A, R> |
将输入元素累加到可变结果容器中的一个mutable reduction operation ,可选地在处理完所有输入元素后将累加结果转换为最终表示形式。 缩减操作可以按顺序执行也可以并行执行。
可变减少操作的例子包括:将元素累加到Collection
; 使用StringBuilder
连接字符串; 计算关于总和,最小值,最大值或平均值等元素的摘要信息; 计算“数据透视表”摘要,例如“卖方最大价值交易”等。类Collectors
提供了许多常见的可变缩减的实现。
Collector
由四个函数指定,这四个函数一起工作以将条目累加到可变结果容器中,并且可以对结果进行可选的最终变换。 他们是:
supplier()
)accumulator()
)combiner()
)finisher()
)收集器还具有一系列特性,例如 CONCURRENT
,它们提供了一些可用于缩减实施以提供更好性能的提示。
使用收集器连续执行缩减将使用供应商函数创建单个结果容器,并为每个输入元素调用一次累加器函数。 并行实现将对输入进行分区,为每个分区创建一个结果容器,将每个分区的内容累积到该分区的子结果中,然后使用合并器函数将子结果合并为合并结果。
为了确保顺序和并行执行产生等效的结果,集电极函数必须满足的 标识和一个 associativity个约束。
身份约束表示,对于任何部分累积结果,将其与空结果容器组合必须产生等效结果。 也就是说,对于部分累加结果a
,这是任何一系列累加器和组合器调用的结果, a
必须等于combiner.apply(a, supplier.get())
。
关联约束表示分割计算必须产生一个等效的结果。 也就是说,对于任何输入元素t1
和t2
,下面的计算中的结果r1
和r2
必须是等效的:
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
特征,二累加结果a1
和a2
是等价的,如果finisher.apply(a1).equals(finisher.apply(a2))
。 对于无序的收藏家来说,放松等同是为了允许与秩序差异相关的不平等。 (例如,将元素累积到List
的无序收集器会考虑两个相同的元素,如果它们包含相同的元素,则会忽略顺序。)
基于 Collector
实施简化的 Collector
(例如 collect(Collector)
)必须遵守以下约束:
Collector
needing to implement any additional synchronization. The reduction implementation must manage that the input is properly partitioned, that partitions are processed in isolation, and combining happens only after accumulation is complete.UNORDERED
characteristics or if the originating data is unordered.除了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)
).
也可以看看:
Nested classes |
|
---|---|
枚举 |
Collector.Characteristics 指示 |
Public methods |
|
---|---|
abstract BiConsumer<A, T> |
accumulator() 将值折叠为可变结果容器的函数。 |
abstract Set<Collector.Characteristics> |
characteristics() 返回 |
abstract BinaryOperator<A> |
combiner() 接受两个部分结果并合并它们的函数。 |
abstract Function<A, R> |
finisher() 执行从中间累积类型 |
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) 返回一个新 |
static <T, R> Collector<T, R, R> |
of(Supplier<R> supplier, BiConsumer<R, T> accumulator, BinaryOperator<R> combiner, Characteristics... characteristics) 返回一个新 |
abstract Supplier<A> |
supplier() 一个创建并返回一个新的可变结果容器的函数。 |
BiConsumer<A, T> accumulator ()
将值折叠为可变结果容器的函数。
Returns | |
---|---|
BiConsumer<A, T> |
a function which folds a value into a mutable result container |
Set<Collector.Characteristics> characteristics ()
返回Set
的Collector.Characteristics
指示此收集器的特征。 这个集合应该是不可变的。
Returns | |
---|---|
Set<Collector.Characteristics> |
an immutable set of collector characteristics |
BinaryOperator<A> combiner ()
接受两个部分结果并合并它们的函数。 组合器函数可以将状态从一个参数折叠到另一个参数中并返回,或者返回一个新的结果容器。
Returns | |
---|---|
BinaryOperator<A> |
a function which combines two partial results into a combined result |
Function<A, R> finisher ()
执行从中间累积类型 A
到最终结果类型 R
的最终 R
。
如果设置了特征 IDENTITY_TRANSFORM
则可以将该函数假定为具有从 A
到 R
的未检查转换的标识转换。
Returns | |
---|---|
Function<A, R> |
a function which transforms the intermediate result to the final result |
Collector<T, A, R> of (Supplier<A> supplier, BiConsumer<A, T> accumulator, BinaryOperator<A> combiner, Function<A, R> finisher, Characteristics... characteristics)
返回一个新 Collector
由给定的描述 supplier
, accumulator
, combiner
,并 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 |
Collector<T, R, R> of (Supplier<R> supplier, BiConsumer<R, T> accumulator, BinaryOperator<R> combiner, Characteristics... characteristics)
返回一个新Collector
由给定的描述supplier
, accumulator
,并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<A> supplier ()
一个创建并返回一个新的可变结果容器的函数。
Returns | |
---|---|
Supplier<A> |
a function which returns a new, mutable result container |