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
- 派生
- 属性
- 実装
注釈
ソースの要素を走査およびパーティション分割するためのオブジェクト。 Spliterator でカバーされる要素のソースは、配列、IO チャネル、 Collection
ジェネレーター関数などです。
分割子は、要素を個別 () または連続して#tryAdvance tryAdvance()
一括 (#forEachRemaining forEachRemaining()
) で走査できます。
分割子は、その要素の一部 (を使用) を #trySplit
別の Spliterator としてパーティション分割して、並列操作で使用することもできます。 分割できない、または非常に不均衡または非効率的な方法で分割できない Spliterator を使用する操作は、並列処理の恩恵を受ける可能性は低くなります。 トラバーサルと分割排気要素;各分割子は、1 つの一括計算にのみ役立ちます。
Spliterator は、および の中#SORTED
#NONNULL
#CONCURRENT
#ORDERED
#DISTINCT
#SIZED
#IMMUTABLE
から、その構造、ソース、および要素のセット#characteristics()
も報告します。#SUBSIZED
これらは、計算を制御、専門化、または簡略化するために Spliterator クライアントによって使用される場合があります。 たとえば、 の Collection
Spliterator は を報告 SIZED
し、 の Spliterator Set
は を報告 DISTINCT
し、 の Spliterator SortedSet
は も を報告 SORTED
します。 特性は、単純な共用ビット・セットとして報告されます。
一部の特性では、メソッドの動作がさらに制約されます。たとえば、 の場合 ORDERED
、トラバーサル メソッドは、ドキュメント化された順序に準拠している必要があります。 将来、新しい特性が定義される可能性があるため、実装者は一覧にない値に意味を割り当てないようにする必要があります。
"binding">c IMMUTABLE</c> または <>c>CONCURRENT</c> を報告<しない Spliterator には、分割子 <em>が要素ソースにバインド/em> をバインドする場合、およびバインド<後に検出された要素ソースの構造干渉の検出に関する文書化されたポリシーが必要です。 <em>late-binding</em> Spliterator は、Spliterator の作成時ではなく、推定サイズの最初のトラバーサル、最初の分割、または最初のクエリの時点で要素のソースにバインドします。 遅延バインディング</em>> ではない <Spliterator は、任意のメソッドの構築時点または最初の呼び出し時に要素のソースにバインドされます。 バインド前にソースに加えられた変更は、Spliterator が走査されるときに反映されます。 分割子をバインドした後、構造干渉が検出された場合は、ベスト エフォートベースで をスロー ConcurrentModificationException
する必要があります。 これを行う分割子は、em fail-fast</em> と呼ばれます<。> Spliterator の一括トラバーサル メソッド (#forEachRemaining forEachRemaining()
) は、要素ごとにチェックしてすぐに失敗するのではなく、すべての要素が走査された後の構造干渉に対するトラバーサルとチェックを最適化できます。
分割子は、 メソッドを使用して残りの要素の数の見積もりを #estimateSize
提供できます。 理想的には、特性 #SIZED
に反映されているように、この値は、成功したトラバーサルで検出される要素の数に正確に対応します。 ただし、正確に知られていない場合でも、推定値は、ソースに対して実行される操作に役立つ場合があります。たとえば、さらに分割するか、残りの要素を順番に走査することが望ましいかを判断するのに役立ちます。
並列アルゴリズムでの明らかなユーティリティにもかかわらず、分割子はスレッドセーフであるとは思われません。代わりに、分割子を使用する並列アルゴリズムの実装では、分割子が一度に 1 つのスレッドでのみ使用されるようにする必要があります。 これは一般に、em>シリアル スレッド閉じ込め</em> を介して<簡単に実現できます。これは、多くの場合、再帰分解によって機能する一般的な並列アルゴリズムの自然な結果です。 スレッド呼び出し #trySplit()
は、返された Spliterator を別のスレッドに引き渡す場合があります。これにより、その分割子が走査または分割される可能性があります。 2 つ以上のスレッドが同じ分割子で同時に動作する場合、分割とトラバーサルの動作は未定義です。 元のスレッドが処理のために分割子を別のスレッドに渡す場合は、特定の保証 (分割子の精度#estimateSize()
SIZED
など) がトラバーサルが開始される前にのみ有効であるため、要素が で#tryAdvance(Consumer) tryAdvance()
使用される前にそのハンドオフが発生する場合に最適です。
のSpliterator
プリミティブ サブタイプの特殊化は、、OfLong long
、および の値に対してOfInt int
OfDouble double
提供されます。 対応するラッパー クラスの 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#forEachRemaining(java.util.function.Consumer)
を優先して使用するSpliterator.OfInt#tryAdvance(java.util.function.Consumer)
必要があります。 ボックス化ベースのメソッド#tryAdvance tryAdvance()
#forEachRemaining(java.util.function.Consumer) forEachRemaining()
を使用したプリミティブ値の走査。ボックス化された値に変換された値が検出される順序には影響しません。
1.8 で追加されました。
の Java ドキュメント java.util.Spliterator
。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
プロパティ
Comparator |
この Spliterator のソースが によって |
ExactSizeIfKnown |
この Spliterator が の場合に を |
Handle |
基になる Android オブジェクトの JNI 値を取得します。 (継承元 IJavaObject) |
JniIdentityHashCode |
ラップされたインスタンスの の |
JniManagedPeerState |
マネージド ピアの状態。 (継承元 IJavaPeerable) |
JniPeerMembers |
メンバー アクセスと呼び出しのサポート。 (継承元 IJavaPeerable) |
PeerReference |
JniObjectReferenceラップされた Java オブジェクト インスタンスの を返します。 (継承元 IJavaPeerable) |
メソッド
Characteristics() |
この Spliterator とその要素の特性のセットを返します。 |
Disposed() |
インスタンスが破棄されたときに呼び出されます。 (継承元 IJavaPeerable) |
DisposeUnlessReferenced() |
このインスタンスへの未処理の参照がない場合は、 を呼び出 |
EstimateSize() |
トラバーサルによって検出される要素の数の推定値を |
Finalized() |
インスタンスが終了したときに呼び出されます。 (継承元 IJavaPeerable) |
ForEachRemaining(IConsumer) |
すべての要素が処理されるか、アクションによって例外がスローされるまで、現在のスレッド内の残りの各要素に対して、指定されたアクションを順番に実行します。 |
HasCharacteristics(Int32) |
この分割子 |
SetJniIdentityHashCode(Int32) |
によって返される値を |
SetJniManagedPeerState(JniManagedPeerStates) |
ソースの要素を走査およびパーティション分割するためのオブジェクト。 (継承元 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
によって返される値を |
TryAdvance(IConsumer) |
残りの要素が存在する場合は、指定されたアクションを実行し、 を |
TrySplit() |
この分割子をパーティション分割できる場合は、このメソッドから戻ると、この Spliterator でカバーされない要素をカバーする Spliterator を返します。 |
UnregisterFromRuntime() |
ランタイムが将来 Java.Interop.JniRuntime+JniValueManager.PeekValue の呼び出しから返されないように、このインスタンスの登録を解除します。 (継承元 IJavaPeerable) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
ソースの要素を走査およびパーティション分割するためのオブジェクト。 |
GetJniTypeName(IJavaPeerable) |
ソースの要素を走査およびパーティション分割するためのオブジェクト。 |