語言

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
衍生
屬性
實作

備註

一個用於遍歷與分割來源元素的物件。 分流器所涵蓋的元素來源可以是陣列、 Collection一個 、一個 IO 通道,或是產生器函式。

分割器可以單獨遍歷元素(#tryAdvance tryAdvance()),或依序#forEachRemaining forEachRemaining()大量遍歷()。

分割器也可以將其部分元素(使用 #trySplit)分割成另一個分割器,用於可能的平行運算。 使用無法分割或以高度不平衡或低效率方式分裂的分割器操作,通常不會從平行中受益。 橫向與分離排氣元件;每個分頻器僅可用於單一的批量計算。

分割器同時報告#characteristics()其結構、來源及元素,範圍為 #ORDERED#DISTINCT#IMMUTABLE#SUBSIZED#SORTED#SIZED#NONNULL#CONCURRENT和 。 這些工具可被分割器用戶端用來控制、專門化或簡化計算。 例如,一個分配 Collection 器會回報 SIZED,一個分割 Set 器會回報 DISTINCT,而一個分割 SortedSet 器也會回報 SORTED。 特徵以簡單的聯合位元集合報告。

某些特性還會限制方法行為;例如,若 ORDERED,遍歷方法必須符合其文件中的排序。 未來可能會定義新的特性,因此實作者不應為未列出的值賦予意義。

「綁定」>若分配器不回報 <c>IMMUTABLE</c> 或 <c>CONCURRENT/<c> ,預期會有書面政策:分配器 <em>何時與元素源結合</em> ;以及結合後偵測元素來源結構干擾的偵測。 <em>晚綁定</em> 分割器會在首次遍歷、首次分割或首次查詢估計大小時綁定到元素來源,而非在建立分割器時。 非 em 晚結合</非 <em>> 的分割器會在任何方法的建構或首次呼叫時,綁定到元素的來源。 在結合前對源頭所做的修改會在穿越分線器時反映出來。 綁定後,分配器應在偵測到結構干擾時,依盡全力投擲 ConcurrentModificationException 。 會這樣做的分流器稱為 <em>fail-fast</em>。 分流器的整體遍歷法#forEachRemaining forEachRemaining()()可在所有元件通過後優化遍歷並檢查結構干涉,而非逐件檢查後立即失效。

分流器可透過此 #estimateSize 方法估計剩餘元素數量。 理想情況下,如特徵 #SIZED所反映,此值正對應成功穿越時會遇到的元素數量。 然而,即使不完全確定,估計值仍可能對對源頭執行操作有用,例如判斷是進一步分割還是依序遍歷剩餘元素。

儘管分線器在平行演算法中明顯有用,但並不被期望具備執行緒安全;相反地,使用分割器實現的平行演算法應確保分割器一次只被一個執行緒使用。 這通常可以透過 em>串行執行緒約束</em> 來達成<,這通常是典型平行演算法遞迴分解的自然結果。 呼叫 #trySplit() 執行緒的執行緒可能會將返回的分割器交給另一個執行緒,而該執行緒又可以穿越或進一步拆分該分離器。 如果兩個或多個執行緒同時在同一個分離器上運作,則分裂與遍歷的行為未定義。 如果原始執行緒將分離器交給另一個執行緒處理,最好在任何元素被 消耗#tryAdvance(Consumer) tryAdvance()之前切換,因為某些保證(例如分割器的準確#estimateSize()SIZED度)僅在遍歷開始前有效。

提供 的 Spliterator 原始子類型專門化,分別為 OfInt intOfLong longOfDouble double 值。 子型態預設實作 Spliterator#tryAdvance(java.util.function.Consumer)Spliterator#forEachRemaining(java.util.function.Consumer) 的 box 原始值,對應包裝類別的實例。 這種拳擊可能會削弱使用原始專業化所帶來的性能優勢。 為避免盒裝,應使用相應的原始基礎方法。 例如, 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.util.SpliteratorJava 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

屬性

名稱 Description
Comparator

若此分流器的來源由 #SORTEDComparator則返回 Comparator

ExactSizeIfKnown

便利方法,若此分頻器為 #SIZED,則-1返回 #estimateSize()

Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

一個用於遍歷與分割來源元素的物件。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
Characteristics()

回傳此分流器及其元素的一組特性。

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)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一個用於遍歷與分割來源元素的物件。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於