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()
) 走査できます。
分割子は、おそらく並列操作で使用するために、別の Spliterator として (使用 #trySplit
) 要素の一部をパーティション分割することもできます。 分割できない、または非常に不均衡または非効率的な方法で分割できない Spliterator を使用する操作は、並列処理の恩恵を受ける可能性は低いです。 トラバーサルと分割排気要素;各分割子は、1 つの一括計算にのみ役立ちます。
Spliterator は、その構造、ソース、および要素の#characteristics()
セットを、その中#ORDERED
から、#DISTINCT
、、、#SORTED
、#SIZED
、#CONCURRENT
#NONNULL
#IMMUTABLE
、および報告します#SUBSIZED
。 これらは、計算を制御、特殊化、または簡略化するために Spliterator クライアントによって採用される場合があります。 たとえば、あるレポートの SpliteratorCollection
、would レポートSIZED
DISTINCT
の Set
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 |
ExactSizeIfKnown |
この分割子 |
Handle |
基になる Android オブジェクトの JNI 値を取得します。 (継承元 IJavaObject) |
JniIdentityHashCode |
ラップされたインスタンスの |
JniManagedPeerState |
マネージド ピアの状態。 (継承元 IJavaPeerable) |
JniPeerMembers |
メンバー アクセスと呼び出しのサポート。 (継承元 IJavaPeerable) |
PeerReference |
ラップされた Java オブジェクト インスタンスの a JniObjectReference を返します。 (継承元 IJavaPeerable) |
メソッド
Characteristics() |
この Spliterator とその要素の特性のセットを返します。 |
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) |
ソースの要素を走査およびパーティション分割するためのオブジェクト。 |