次の方法で共有


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()) 走査できます。

分割子は、おそらく並列操作で使用するために、別の Spliterator として (使用 #trySplit) 要素の一部をパーティション分割することもできます。 分割できない、または非常に不均衡または非効率的な方法で分割できない Spliterator を使用する操作は、並列処理の恩恵を受ける可能性は低いです。 トラバーサルと分割排気要素;各分割子は、1 つの一括計算にのみ役立ちます。

Spliterator は、その構造、ソース、および要素の#characteristics()セットを、その中#ORDEREDから、#DISTINCT、、、#SORTED#SIZED#CONCURRENT#NONNULL#IMMUTABLE、および報告します#SUBSIZED。 これらは、計算を制御、特殊化、または簡略化するために Spliterator クライアントによって採用される場合があります。 たとえば、あるレポートの SpliteratorCollection、would レポートSIZEDDISTINCTSet Spliterator、および A の Spliterator SortedSet もレポートSORTEDします。 特性は、単純な共用ビット・セットとして報告されます。

一部の特性では、メソッドの動作がさらに制約されます。たとえば、トラバーサル メソッドが文書化された順序に準拠している必要がある場合 ORDEREDなどです。 将来、新しい特性が定義される可能性があるため、実装者は一覧にない値に意味を割り当てないようにする必要があります。

"binding">c IMMUTABLE</c> または <c>>CONCURRENT</c> を報告<しない Spliterator には、分割子 <em>が要素ソースにバインド/em> するとき、およびバインド<後に検出された要素ソースの構造的干渉の検出に関する文書化されたポリシーが必要です。 <em>late-binding</em> Spliterator は、Spliterator の作成時ではなく、最初のトラバーサル、最初の分割、または推定サイズの最初のクエリの時点で要素のソースにバインドします。 遅延バインディング</em> ではない <>Spliterator は、任意のメソッドの構築時点または最初の呼び出し時に要素のソースにバインドされます。 バインディング前にソースに加えられた変更は、Spliterator が走査されるときに反映されます。 Spliterator をバインドした後、構造上の干渉が検出された場合は、ベスト エフォートベースでスロー ConcurrentModificationException する必要があります。 これを行う分割子は、em fail-fast</em> と呼ばれます<。> Spliterator の一括トラバーサル メソッド (#forEachRemaining forEachRemaining()) は、要素ごとにチェックしてすぐに失敗するのではなく、すべての要素が走査された後にトラバーサルを最適化し、構造上の干渉をチェックできます。

分割子は、メソッドを使用して残りの要素の数の見積もりを #estimateSize 提供できます。 理想的には、特性 #SIZEDに反映されるように、この値は、成功したトラバーサルで検出される要素の数に正確に対応します。 ただし、正確に知られていない場合でも、推定値は、ソースに対して実行される操作に役立つ場合があります。たとえば、残りの要素をさらに分割するか、残りの要素を順番に走査することが好ましいかを判断するのに役立ちます。

並列アルゴリズムでの明白なユーティリティにもかかわらず、分割子はスレッドセーフであるとは考えされていません。代わりに、分割子を使用する並列アルゴリズムの実装では、分割子が一度に 1 つのスレッドでのみ使用されるようにする必要があります。 これは一般に、シリアル スレッド制限</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#tryAdvance(java.util.function.Consumer)Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)必要があります。 ボックス化ベースのメソッド#tryAdvance tryAdvance()#forEachRemaining(java.util.function.Consumer) forEachRemaining()を使用したプリミティブ値のトラバーサルは、ボックス化された値に変換された値が検出される順序には影響しません。

1.8 で追加されました。

の Java ドキュメントjava.util.Spliterator

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

プロパティ

Comparator

この Spliterator のソースが a Comparatorの場合は#SORTED、そのComparator値を返します。

ExactSizeIfKnown

この分割子#SIZEDが 、else -1かどうかを返す#estimateSize()便利なメソッドです。

Handle

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

(継承元 IJavaObject)
JniIdentityHashCode

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

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniPeerMembers

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

(継承元 IJavaPeerable)
PeerReference

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

(継承元 IJavaPeerable)

メソッド

Characteristics()

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

Disposed()

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

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

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

(継承元 IJavaPeerable)
EstimateSize()

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

Finalized()

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

(継承元 IJavaPeerable)
ForEachRemaining(IConsumer)

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

HasCharacteristics(Int32)

trueこの Spliterator #characteristics に指定されたすべての特性が含まれている場合に返します。

SetJniIdentityHashCode(Int32)

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

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

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

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

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

(継承元 IJavaPeerable)
TryAdvance(IConsumer)

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

TrySplit()

この分割子をパーティション分割できる場合は、要素をカバーする分割子を返します。このメソッドから戻ると、この分割子の対象になりません。

UnregisterFromRuntime()

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

(継承元 IJavaPeerable)

拡張メソッド

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

適用対象