ISpliterator インターフェイス

定義

ソースの要素を走査およびパーティション分割するためのオブジェクト。

[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 intOfDouble 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 のソースが によってComparatorである場合、 はその #SORTEDComparator返します。

ExactSizeIfKnown

この Spliterator が の場合に を#estimateSize()返す便利なメソッド。それ以外の場合-1#SIZED

Handle

基になる Android オブジェクトの JNI 値を取得します。

(継承元 IJavaObject)
JniIdentityHashCode

ラップされたインスタンスの の java.lang.System.identityHashCode() 値を返します。

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniPeerMembers

メンバー アクセスと呼び出しのサポート。

(継承元 IJavaPeerable)
PeerReference

JniObjectReferenceラップされた Java オブジェクト インスタンスの を返します。

(継承元 IJavaPeerable)

メソッド

Characteristics()

この Spliterator とその要素の特性のセットを返します。

Disposed()

インスタンスが破棄されたときに呼び出されます。

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

このインスタンスへの未処理の参照がない場合は、 を呼び出 Dispose()します。それ以外の場合は何も行いません。

(継承元 IJavaPeerable)
EstimateSize()

トラバーサルによって検出される要素の数の推定値を #forEachRemaining 返します。または、無限、不明、または計算にコストがかかりすぎる場合は を返 Long#MAX_VALUE します。

Finalized()

インスタンスが終了したときに呼び出されます。

(継承元 IJavaPeerable)
ForEachRemaining(IConsumer)

すべての要素が処理されるか、アクションによって例外がスローされるまで、現在のスレッド内の残りの各要素に対して、指定されたアクションを順番に実行します。

HasCharacteristics(Int32)

この分割子#characteristicstrue指定されたすべての特性が含まれている場合は を返します。

SetJniIdentityHashCode(Int32)

によって返される値を JniIdentityHashCode設定します。

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

ソースの要素を走査およびパーティション分割するためのオブジェクト。

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

によって返される値を PeerReference設定します。

(継承元 IJavaPeerable)
TryAdvance(IConsumer)

残りの要素が存在する場合は、指定されたアクションを実行し、 を true返します。それ以外の場合は を返します false

TrySplit()

この分割子をパーティション分割できる場合は、このメソッドから戻ると、この Spliterator でカバーされない要素をカバーする Spliterator を返します。

UnregisterFromRuntime()

ランタイムが将来 Java.Interop.JniRuntime+JniValueManager.PeekValue の呼び出しから返されないように、このインスタンスの登録を解除します。

(継承元 IJavaPeerable)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

ソースの要素を走査およびパーティション分割するためのオブジェクト。

GetJniTypeName(IJavaPeerable)

ソースの要素を走査およびパーティション分割するためのオブジェクト。

適用対象