ISpliterator 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
用于遍历和分区源元素的对象。
[Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface ISpliterator : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type ISpliterator = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 派生
- 属性
- 实现
注解
用于遍历和分区源元素的对象。 拆分器所涵盖的元素源可以是数组、数组、 Collection
IO 通道或生成器函数。
拆分器可以单独(#tryAdvance tryAdvance()
)或按顺序遍历元素(#forEachRemaining forEachRemaining()
)。
拆分器还可以将其某些元素(使用 #trySplit
)分区为另一个拆分器,以用于可能并行的操作。 使用拆分器的操作不能以高度不平衡或低效的方式进行拆分或这样做,不太可能受益于并行度。 遍历和拆分耗尽元素;每个拆分器仅适用于单个批量计算。
拆分器还报告一组#characteristics()
其结构、源和元素,这些元素来自 、#ORDERED
#DISTINCT
#SORTED
、#SIZED
、#IMMUTABLE
#NONNULL
、 #CONCURRENT
和。#SUBSIZED
拆分器客户端可能使用这些客户端来控制、专门或简化计算。 例如,将报告的拆分器Collection
、将报告的SIZED
DISTINCT
拆分器Set
,以及将报告SORTED
拆分SortedSet
器的拆分器。 特征报告为简单的联合位集。
一些特征还约束方法行为;例如 ORDERED
,遍历方法必须符合其记录的顺序。 将来可能会定义新特征,因此实现器不应为未列出的值分配含义。
“binding”>一个不报告 <c>IMMUTABLE</c 或 <c>CONCURRENT</c>> 的拆分器应有一个记录的策略:当拆分器 <em>binds</em> 绑定到元素源时,以及检测绑定后检测到的元素源的结构干扰。 <em>后期绑定</em> Spliterator 绑定到第一次遍历、第一次拆分或第一个查询估计大小的元素源,而不是在创建拆分器时。 非<>后期绑定</em> 的拆分器绑定到构造点或首次调用任何方法的元素源。 在遍历拆分器时,在绑定之前对源进行的修改将反映。 绑定拆分器后,如果检测到结构干扰,应尽量引发 ConcurrentModificationException
拆分器。 执行此操作的拆分器称为 <em>fail-fast</em>。 拆分器批量遍历方法(#forEachRemaining forEachRemaining()
)可以在遍历所有元素后优化遍历和检查结构干扰,而不是检查每个元素并立即失败。
拆分器可以通过该方法提供剩余元素 #estimateSize
数的估计值。 理想情况下,如特征 #SIZED
所示,此值与成功遍历中遇到的元素数完全对应。 但是,即使不确切地知道,估计值对于对源执行的操作可能仍然很有用,例如帮助确定是最好是进一步拆分还是按顺序遍历其余元素。
尽管在并行算法中具有明显的实用工具,但拆分器不应是线程安全的;相反,使用拆分器并行算法的实现应确保拆分器一次只由一个线程使用。 这通常很容易通过 <em>串行线程限制</em> 实现,这通常是由递归分解工作的典型并行算法的自然后果。 调用 #trySplit()
的线程可能会将返回的拆分器移交给另一个线程,后者反过来可能会遍历或进一步拆分该拆分器。 如果两个或多个线程同时在同一拆分器上运行,则拆分和遍历的行为是不确定的。 如果原始线程将拆分器交给另一个线程进行处理,则最好是在使用任何元素#tryAdvance(Consumer) tryAdvance()
之前进行交接,因为某些保证(如拆分器的准确性#estimateSize()
SIZED
)仅在遍历开始之前有效。
为OfInt int
和OfLong long
OfDouble double
值提供基元子类型专用化Spliterator
。 子类型默认实现 Spliterator#tryAdvance(java.util.function.Consumer)
和 Spliterator#forEachRemaining(java.util.function.Consumer)
框基元值的实例对应的包装器类。 此类装箱可能会破坏使用基元专用化获得的任何性能优势。 为了避免装箱,应使用相应的基于基元的方法。 例如, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)
应 Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)
优先 Spliterator.OfInt#tryAdvance(java.util.function.Consumer)
使用和 Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)
。 使用基于装箱的方法 #tryAdvance tryAdvance()
遍历基元值,不会影响 #forEachRemaining(java.util.function.Consumer) forEachRemaining()
值转换为装箱值的顺序。
已在 1.8 中添加。
适用于 . 的 java.util.Spliterator
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
属性
Comparator |
如果此拆分器的来源 |
ExactSizeIfKnown |
如果此拆分器是 |
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
JniIdentityHashCode |
返回包装实例的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例。 (继承自 IJavaPeerable) |
方法
Characteristics() |
返回此拆分器及其元素的一组特征。 |
Disposed() |
在释放实例时调用。 (继承自 IJavaPeerable) |
DisposeUnlessReferenced() |
如果没有对此实例的未完成引用,则调用 |
EstimateSize() |
返回遍历将遇到的 |
Finalized() |
在实例完成时调用。 (继承自 IJavaPeerable) |
ForEachRemaining(IConsumer) |
对当前线程中的每个剩余元素执行给定操作,直到处理完所有元素或该操作引发异常为止。 |
HasCharacteristics(Int32) |
如果 |
SetJniIdentityHashCode(Int32) |
设置由 |
SetJniManagedPeerState(JniManagedPeerStates) |
用于遍历和分区源元素的对象。 (继承自 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
设置由 |
TryAdvance(IConsumer) |
如果存在剩余元素,则对其执行给定操作,返回 |
TrySplit() |
如果此拆分器可以分区,则返回一个拆分器,该拆分器将覆盖此方法返回时不会由此拆分器覆盖的元素。 |
UnregisterFromRuntime() |
取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。 (继承自 IJavaPeerable) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
用于遍历和分区源元素的对象。 |
GetJniTypeName(IJavaPeerable) |
用于遍历和分区源元素的对象。 |