ICollector 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。
[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> 和关联约束。
标识约束表示,对于任何部分累积的结果,将其与空结果容器结合使用必须生成等效的结果。 也就是说,对于作为任何一系列累加器和组合器调用的结果的部分累积结果 a
, a
必须等效 combiner.apply(a, supplier.get())
于。
关联约束表示,拆分计算必须产生等效的结果。 也就是说,对于任何输入元素 t1
,并且 t2
下面的结果 r1
和 r2
计算结果必须等效:
{@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
个元素的无序收集器将考虑两个等效的列表。
基于Collector
Stream#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.Collector
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
属性
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
JniIdentityHashCode |
返回包装实例的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例。 (继承自 IJavaPeerable) |
方法
Accumulator() |
将值折叠为可变结果容器的函数。 |
Characteristics() |
返回一个 |
Combiner() |
一个接受两个部分结果并合并它们的函数。 |
Disposed() |
在释放实例时调用。 (继承自 IJavaPeerable) |
DisposeUnlessReferenced() |
如果没有对此实例的未完成引用,则调用 |
Finalized() |
在实例完成时调用。 (继承自 IJavaPeerable) |
Finisher() |
执行从中间累积类型到最终结果类型的 |
Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[]) |
返回给定 |
Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[]) |
返回给定 |
SetJniIdentityHashCode(Int32) |
设置由 |
SetJniManagedPeerState(JniManagedPeerStates) |
可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。 (继承自 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
设置由 |
Supplier() |
一个函数,用于创建并返回新的可变结果容器。 |
UnregisterFromRuntime() |
取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。 (继承自 IJavaPeerable) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。 |
GetJniTypeName(IJavaPeerable) |
可变减少操作,可将输入元素累积到可变结果容器中,在处理所有输入元素后,可以选择将累积结果转换为最终表示形式。 |