言語

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 の対象となる要素のソースは、配列、 Collection、IO チャネル、ジェネレーター関数などです。

分割子は、要素を個別 (#tryAdvance tryAdvance()) または連続して一括 (#forEachRemaining forEachRemaining()) で走査できます。

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

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

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

"binding">A spliterator that does not report <c>IMMUTABLE</c> or <c>CONCURRENT</c> is expected to have a documented policy when the spliterator <em>binds</em> ; 結合後に検出された要素源の構造干渉の検出。 <em>late-binding</em> Spliterator は、Spliterator の作成時ではなく、最初のトラバーサル、最初の分割、または推定サイズの最初のクエリの時点で要素のソースにバインドします。 <em>late-binding</em>ではない Spliterator は、任意のメソッドの構築時点または最初の呼び出し時に要素のソースにバインドします。 バインド前にソースに加えられた変更は、Spliterator が走査されるときに反映されます。 Spliterator をバインドした後は、ベスト エフォートベースで、構造上の干渉が検出された場合に ConcurrentModificationException をスローする必要があります。 これを行う分割子は、 <em>fail-fast</em> と呼ばれます。 Spliterator の一括トラバーサル メソッド (#forEachRemaining forEachRemaining()) は、要素ごとにチェックしてすぐに失敗するのではなく、トラバーサルを最適化し、すべての要素が走査された後に構造上の干渉をチェックする場合があります。

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

並列アルゴリズムでの明白なユーティリティにもかかわらず、分割子はスレッドセーフであるとは考えされていません。代わりに、分割子を使用する並列アルゴリズムの実装では、分割子が一度に 1 つのスレッドでのみ使用されるようにする必要があります。 これは一般に、 <em>serial thread-confinement</em>を介して簡単に実現できます。これは、多くの場合、再帰的分解によって機能する一般的な並列アルゴリズムの自然な結果です。 スレッド呼び出し #trySplit() は、返された分割子を別のスレッドに引き渡すことがあり、その後、その分割子を走査または分割することができます。 2 つ以上のスレッドが同じ分割子で同時に動作する場合、分割とトラバーサルの動作は未定義です。 元のスレッドが分割子を別のスレッドに渡して処理する場合は、特定の保証 (SIZED分割子の#estimateSize()の精度など) がトラバーサルが開始される前にのみ有効であるため、要素が#tryAdvance(Consumer) tryAdvance()で使用される前にそのハンドオフが発生する場合に最適です。

Spliteratorのプリミティブ サブタイプの特殊化は、OfInt intOfLong long、および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ドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

プロパティ

名前 説明
Comparator

この Spliterator のソースがComparatorによって#SORTEDされている場合は、そのComparatorを返します。

ExactSizeIfKnown

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

Handle

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

(継承元 IJavaObject)
JniIdentityHashCode

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

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniObjectReferenceControlBlock

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

(継承元 IJavaPeerable)
JniPeerMembers

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

(継承元 IJavaPeerable)
PeerReference

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

(継承元 IJavaPeerable)

メソッド

名前 説明
Characteristics()

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

Disposed()

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

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

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

(継承元 IJavaPeerable)
EstimateSize()

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

Finalized()

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

(継承元 IJavaPeerable)
ForEachRemaining(IConsumer)

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

HasCharacteristics(Int32)

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

SetJniIdentityHashCode(Int32)

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

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

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

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

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

(継承元 IJavaPeerable)
TryAdvance(IConsumer)

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

TrySplit()

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

UnregisterFromRuntime()

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

(継承元 IJavaPeerable)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象