ICollector 接口

定义

可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。

[Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })]
public interface ICollector : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })>]
type ICollector = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
属性
实现

注解

可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。 可以按顺序或并行执行减少操作。

可变减少操作的示例包括:将元素累积到一个 Collection;使用 a; 使用 a StringBuilder;计算有关元素的摘要信息,例如 sum、min、max 或 average;计算“数据透视表”摘要,例如“卖方的最大值交易”等。该类 Collectors 提供许多常见可变缩减的实现。

A Collector 由四个函数指定,这些函数协同工作,将条目累积到可变结果容器中,并选择性地对结果执行最终转换。 它们是:<创建><>新的结果容器(#supplier())/li li><>将新数据元素合并到结果容器中(#accumulator())<</li li><>将两个结果容器合并为一个#combiner()()</li<>>li 对容器执行可选的最终转换(#finisher())</li></ul>

收集器还具有一组特征,例如 Characteristics#CONCURRENT,提供减少实现可用于提供更好的性能的提示。

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

为了确保顺序和并行执行产生等效的结果,收集器函数必须满足 <em>identity</em> 和关联约束。

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

关联约束表示,拆分计算必须产生等效的结果。 也就是说,对于任何输入元素 t1 ,并且 t2下面的结果 r1r2 计算结果必须等效:

{@code
                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,如果finisher.apply(a1).equals(finisher.apply(a2))相等,则a2为等效结果。 对于无序收集器,放宽等效性以允许与差异相关的非相等性。 (例如,一个无序收集器,如果元素包含相同的元素(忽略顺序),则累积到一 List 个元素的无序收集器将考虑两个等效的列表。

基于CollectorStream#collect(Collector)以下约束实现缩减的库必须遵循以下约束:<ul><li>传递给累加器函数的第一个参数,传递给合并器函数的两个参数,传递给完成程序函数的参数必须是先前调用结果供应商、累加器或组合器函数的结果。</li li><>实现不应对任何结果供应商、累加器或组合器函数的结果执行任何操作,而不是再次将其传递给累加器、合并器或完成器函数,或将它们返回到缩减操作的调用方。</li li><>如果结果传递给合并器或完成器函数,并且同一对象不会从该函数返回,则永远不会再次使用。</li li><>一旦结果传递到组合器或完成器函数,它永远不会再次传递给累加器函数。</li li><>对于非并发收集器,从结果供应商、累加器或组合器函数返回的任何结果都必须是连续线程限制的。 这样,集合就可以并行进行,而无需 Collector 实现任何其他同步。 缩减实现必须管理输入已正确分区、隔离处理分区,并且只有在累积完成后才会进行合并。</li li><>对于并发收集器,实现可以自由(但不需要)同时实现缩减。 并发减少是从多个线程并发调用累加器函数的,使用同一并发可修改的结果容器,而不是在累积期间保持结果隔离。 仅当收集器具有 Characteristics#UNORDERED 特征或原始数据未排序时,才应应用并发减少。</li></ul>

除了预定义的实现之外 Collectors,静态工厂方法 #of(Supplier, BiConsumer, BinaryOperator, Characteristics...) 还可用于构造收集器。 例如,可以创建一个收集器,该收集器将小组件累积到其中 TreeSet

{@code
                Collector<Widget, ?, TreeSet<Widget>> intoSet =
                    Collector.of(TreeSet::new, TreeSet::add,
                                 (left, right) -> { left.addAll(right); return left; });
            }

(此行为也由预定义收集器 Collectors#toCollection(Supplier)实现)。

已在 1.8 中添加。

适用于 . 的 java.util.stream.CollectorJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

属性

Handle

获取基础 Android 对象的 JNI 值。

(继承自 IJavaObject)
JniIdentityHashCode

返回包装实例的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
PeerReference

返回 JniObjectReference 包装的 Java 对象实例。

(继承自 IJavaPeerable)

方法

Accumulator()

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

Characteristics()

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

Combiner()

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

Disposed()

在释放实例时调用。

(继承自 IJavaPeerable)
DisposeUnlessReferenced()

如果没有对此实例的未完成引用,则调用 Dispose();否则不执行任何操作。

(继承自 IJavaPeerable)
Finalized()

在实例完成时调用。

(继承自 IJavaPeerable)
Finisher()

执行从中间累积类型到最终结果类型的AR最终转换。

Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[])

返回给定supplier函数、combineraccumulator函数和finisher函数描述的新Collector值。

Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[])

返回给定supplier函数、combineraccumulator函数和finisher函数描述的新Collector值。

SetJniIdentityHashCode(Int32)

设置由 JniIdentityHashCode. 返回的值。

(继承自 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。

(继承自 IJavaPeerable)
SetPeerReference(JniObjectReference)

设置由 PeerReference. 返回的值。

(继承自 IJavaPeerable)
Supplier()

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

UnregisterFromRuntime()

取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。

(继承自 IJavaPeerable)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。

GetJniTypeName(IJavaPeerable)

可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。

适用于