ICollector 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
可變動的縮減作業,可將輸入元素累積到可變的結果容器中,選擇性地將所有輸入元素處理後,將累積的結果轉換成最終標記法。
[Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })]
public interface ICollector : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })>]
type ICollector = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 屬性
- 實作
備註
可變動的縮減作業,可將輸入元素累積到可變的結果容器中,選擇性地將所有輸入元素處理後,將累積的結果轉換成最終標記法。 縮減作業可以循序或平行執行。
可變縮減作業的範例包括:將元素累積到 Collection
;使用 StringBuilder
串連字號串;計算總和、min、max 或 average 等元素的摘要資訊;計算「樞紐分析表」摘要,例如「賣方交易的最大值」等。 Collectors
類別提供許多常見可變動縮減的實作。
Collector
是由四個函式所指定,這些函式會一起將專案累積到可變動的結果容器中,並選擇性地對結果執行最終轉換。 它們是: < (<> 建立新的結果容器, #supplier()
) < /li <> li >> 將新的資料元素併入結果容器 (<#accumulator()
) /li li > 將兩個結果容器結合成一個 () <#combiner()
/li >><< li > 對容器 #finisher()
執行選擇性最終轉換 () < /li >< /ul>
收集器也有一組特性,例如 Characteristics#CONCURRENT
,可提供減少實作可用來提供更佳效能的提示。
使用收集器進行縮減的循序實作會使用供應商函式建立單一結果容器,並針對每個輸入元素叫用累積函數一次。 平行實作會分割輸入、為每個分割區建立結果容器、將每個分割區的內容累積到該分割區的子資料,然後使用結合器函式將子資料合併成合併的結果。
為了確保循序和平行執行會產生相等的結果,收集器函式必須滿足 < em > identity < /em > 和關聯性條件約束。
身分識別條件約束指出,對於任何部分累積的結果,將它與空的結果容器結合,必須產生相等的結果。 也就是說,對於屬於任何一系列累積器和結合器調用之結果的部分累積結果 a
, a
必須等於 combiner.apply(a, supplier.get())
。
關聯性條件約束表示分割計算必須產生相等的結果。 也就是說,對於任何輸入元素 t1
和 t2
,下列計算 r1
的結果和 r2
必須相等:
{@code
A a1 = supplier.get();
accumulator.accept(a1, t1);
accumulator.accept(a1, t2);
R r1 = finisher.apply(a1); // result without splitting
A a2 = supplier.get();
accumulator.accept(a2, t1);
A a3 = supplier.get();
accumulator.accept(a3, t2);
R r2 = finisher.apply(combiner.apply(a2, a3)); // result with splitting
}
對於沒有特性的 UNORDERED
收集器,有兩個累積的結果 a1
,如果 finisher.apply(a1).equals(finisher.apply(a2))
相等,則 a2
為相等。 對於未排序的收集器,等價會放寬,以允許與差異相關的不相等順序。 (例如,累積元素至 List
的未排序收集器,如果它們包含相同的元素,則會將兩個清單視為相等,忽略 order.)
根據 實作 Collector
縮減的程式庫,例如 Stream#collect(Collector)
必須遵守下列條件約束: < ul >< li > 傳遞至累加器函式的第一個引數、傳遞至結合器函式的兩個引數,以及傳遞至完成項函式的引數必須是先前叫用結果供應商、累積器或結合器函式的結果。 </li li ><> 實作不應對任何結果供應商、累積器或結合器函式的結果執行任何動作,而不是將它們再次傳遞至累加器、結合器或完成項函式,或將它們傳回至縮減作業的呼叫端。 </li >< li > 如果結果傳遞至結合器或完成項函式,而且同一個物件不會從該函式傳回,則永遠不會再使用。 </li >< li > 將結果傳遞至結合器或完成項函式之後,永遠不會再次傳遞至累加器函式。 </li >< li > 對於非並行收集器,從結果供應商、累積器或結合器函式傳回的任何結果都必須以序列方式限制執行緒。 這可讓收集以平行方式發生, Collector
而不需要實作任何其他同步處理。 縮減實作必須管理輸入已正確分割、分割區會以隔離方式處理,而且只有在累積完成之後才會合並。 </li >< li > 對於並行收集器,實作是免費的 (,但不需要) 同時實作縮減。 並行縮減是同時從多個執行緒呼叫累加器函式的一個,使用相同可同時修改的結果容器,而不是在累積期間隔離結果。 只有在收集器具有 Characteristics#UNORDERED
特性或原始資料未排序時,才應該套用並行縮減。 </li >< /ul>
除了 中的 Collectors
預先定義實作之外,靜態處理站方法 #of(Supplier, BiConsumer, BinaryOperator, Characteristics...)
也可以用來建構收集器。 例如,您可以建立收集器,將小工具累積至 TreeSet
,其中包含:
{@code
Collector<Widget, ?, TreeSet<Widget>> intoSet =
Collector.of(TreeSet::new, TreeSet::add,
(left, right) -> { left.addAll(right); return left; });
}
(此行為也會由預先定義的收集器 Collectors#toCollection(Supplier)
) 實作。
已在 1.8 中新增。
的 java.util.stream.Collector
JAVA 檔。
此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
屬性
Handle |
取得基礎 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
JniIdentityHashCode |
傳回已包裝實例的 值 |
JniManagedPeerState |
Managed 對等的狀態。 (繼承來源 IJavaPeerable) |
JniPeerMembers |
成員存取和調用支援。 (繼承來源 IJavaPeerable) |
PeerReference |
傳 JniObjectReference 回已包裝 JAVA 物件實例的 。 (繼承來源 IJavaPeerable) |
方法
Accumulator() |
將值折迭成可變結果容器的函式。 |
Characteristics() |
傳 |
Combiner() |
接受兩個部分結果並加以合併的函式。 |
Disposed() |
處置實例時呼叫。 (繼承來源 IJavaPeerable) |
DisposeUnlessReferenced() |
如果這個實例沒有未完成的參考,則呼叫 |
Finalized() |
實例完成時呼叫。 (繼承來源 IJavaPeerable) |
Finisher() |
執行從中繼累積類型到最終結果類型的 |
Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[]) |
傳回指定 |
Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[]) |
傳回指定 |
SetJniIdentityHashCode(Int32) |
設定 所 |
SetJniManagedPeerState(JniManagedPeerStates) |
可變動的縮減作業,可將輸入元素累積到可變的結果容器中,選擇性地將所有輸入元素處理後,將累積的結果轉換成最終標記法。 (繼承來源 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
設定 所 |
Supplier() |
函式,可建立並傳回新的可變動結果容器。 |
UnregisterFromRuntime() |
取消註冊這個實例,讓執行時間不會從未來的 Java.Interop.JniRuntime+JniValueManager.PeekValue 調用傳回它。 (繼承來源 IJavaPeerable) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
可變動的縮減作業,可將輸入元素累積到可變的結果容器中,選擇性地將所有輸入元素處理後,將累積的結果轉換成最終標記法。 |
GetJniTypeName(IJavaPeerable) |
可變動的縮減作業,可將輸入元素累積到可變的結果容器中,選擇性地將所有輸入元素處理後,將累積的結果轉換成最終標記法。 |