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
- 衍生
- 屬性
- 實作
備註
物件,用於周遊和分割來源的專案。 分割器所涵蓋的元素來源可以是陣列、 Collection
IO 通道或產生器函式。
Spliterator 可能會個別周遊元素, (#tryAdvance tryAdvance()
) 或依序 #forEachRemaining forEachRemaining()
() 。
分割器也可能使用) 作為另一個分割器,將部分元素 #trySplit
分割 (,以用於可能平行作業。 使用無法分割或以高度不平衡或效率不佳的方式分割的分割器作業,不太可能受益于平行處理原則。 周遊和分割耗盡元素;每個分割器僅適用于單一大量計算。
Spliterator 也會從 、、、 #NONNULL
#CONCURRENT
#SIZED
#IMMUTABLE
#SORTED
、 和 #SUBSIZED
之間 #ORDERED
報告一組 #characteristics()
其結構、來源和元素。 #DISTINCT
這些可由 Spliterator 用戶端使用,以控制、特製化或簡化計算。 例如,的 Collection
Spliterator Set
會報告 SIZED
、針對 的分割器會報告 DISTINCT
,而 的 SortedSet
Spliterator 也會報告 SORTED
。 特性會回報為簡單的聯集位集。
某些特性會額外限制方法行為;例如,如果 ORDERED
,周遊方法必須符合其記載的順序。 未來可能會定義新的特性,因此實作者不應該將意義指派給未列出的值。
「系結」 > 未報告 < c > IMMUTABLE < /c > 或 < c > CONCURRENT < /c > 的 Spliterator 預期會有相關記載的原則:當分割器 < em > 系結 <> 至元素來源時,以及偵測在系結之後偵測到元素來源的結構干擾。 <em > 晚期系 < 結/em > Spliterator 會在第一次周遊、第一次分割或第一次查詢估計大小時系結至元素的來源,而不是在建立 Spliterator 時。 不是 < em > 晚期系結 < /em > 的 Spliterator 會在建構點或第一次叫用任何方法時系結至專案的來源。 在系結之前對來源所做的修改會在周遊 Spliterator 時反映。 系結分割器之後,應該盡最大努力在偵測到結構化干擾時擲 ConcurrentModificationException
回。 執行此動作的分割器稱為 < em > fail-fast < /em > 。 分割器的大量周遊方法 (#forEachRemaining forEachRemaining()
) 可能會優化周遊,並在周遊所有元素之後檢查結構干擾,而不是立即檢查個別元素並立即失敗。
分割器可以透過 #estimateSize
方法提供剩餘元素數目的估計值。 在理想情況下,如特性 #SIZED
所反映,這個值完全符合在成功周遊中遇到的元素數目。 不過,即使未確切知道,估計值對在來源上執行的作業仍然很有用,例如協助判斷是否最好進一步分割或循序周遊其餘元素。
雖然在平行演算法中明顯公用程式,但分割器不預期為安全線程;相反地,使用分割器之平行演算法的實作應該確保分割器一次只能由一個執行緒使用。 這通常很容易透過 < em > 序列執行緒限制 < /em > 來取得,這通常是由遞迴分解運作的典型平行演算法自然結果。 呼叫 #trySplit()
的執行緒可能會將傳回的 Spliterator 交由另一個執行緒,進而周遊或進一步分割該分割器。 如果兩個或多個執行緒在相同的分割器上同時運作,則分割和周遊的行為是未定義的。 如果原始執行緒將分割器交給另一個執行緒進行處理,最好是在使用 使用 的任何元素 #tryAdvance(Consumer) tryAdvance()
之前進行該交接,因為某些保證 (例如分割器的正確性 #estimateSize()
SIZED
,) 只有在周遊開始之前才有效。
的基本子類型特製化 Spliterator
會針對 OfInt int
、 OfLong long
和 OfDouble double
值提供。 和 Spliterator#forEachRemaining(java.util.function.Consumer)
box 基本值的子類型預設實 Spliterator#tryAdvance(java.util.function.Consumer)
作,其對應包裝函式類別的實例。 這類 Boxing 可能會破壞使用基本特製化所取得的任何效能優勢。 若要避免 Boxing,應該使用對應的基本型方法。 例如, 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)
設定。 使用 Boxing 型方法 #tryAdvance tryAdvance()
周遊基本值,且 #forEachRemaining(java.util.function.Consumer) forEachRemaining()
不會影響遇到值轉換成 Boxed 值的順序。
已在 1.8 中新增。
的 java.util.Spliterator
JAVA 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據中所述的詞彙使用。
屬性
Comparator |
如果這個分割器的來源是由 |
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,這個方法傳回時不會涵蓋此分割器。 |
UnregisterFromRuntime() |
取消註冊此實例,讓執行時間不會從未來的 Java.Interop.JniRuntime+JniValueManager.PeekValue 調用傳回它。 (繼承來源 IJavaPeerable) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
物件,用於周遊和分割來源的專案。 |
GetJniTypeName(IJavaPeerable) |
物件,用於周遊和分割來源的專案。 |