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
;使用 StringBuilder
连接字符串;计算有关元素的汇总信息,如 sum、min、max 或 average;计算“透视表”汇总(如“卖方的最大价值交易”)等。类 Collectors
提供许多常见可变缩减的实现。
由四个 Collector
函数指定,这些函数协同工作,将条目累积到可变结果容器中,并选择性地对结果执行最终转换。 它们是:<ul><li>创建新结果容器 (#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
收集器,如果 finisher.apply(a1).equals(finisher.apply(a2))
为 ,则两个累积的结果 a1
和 a2
等效。 对于无序收集器,等效性会放宽,以允许与顺序差异相关的非相等性。 (例如,将元素累积到 的无序收集器会将两个 List
列表视为等效项(如果它们包含相同的元素,则忽略 order.)
基于 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 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
属性
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) |
可变缩减操作,将输入元素累积到可变结果容器中,并可选择在所有输入元素都已处理后将累积结果转换为最终表示形式。 |