Condividi tramite


ICollector Interfaccia

Definizione

Operazione di riduzione modificabile che accumula gli elementi di input in un contenitore di risultati modificabile, trasformando facoltativamente il risultato accumulato in una rappresentazione finale dopo l'elaborazione di tutti gli elementi di input.

[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
Attributi
Implementazioni

Commenti

Operazione di riduzione modificabile che accumula gli elementi di input in un contenitore di risultati modificabile, trasformando facoltativamente il risultato accumulato in una rappresentazione finale dopo l'elaborazione di tutti gli elementi di input. Le operazioni di riduzione possono essere eseguite in sequenza o in parallelo.

Esempi di operazioni di riduzione modificabili includono: accumulo di elementi in un Collectionoggetto , concatenazione di stringhe con un StringBuilder; calcolo di informazioni di riepilogo sugli elementi, ad esempio somma, min, max o media; calcolo di riepiloghi "tabella pivot", ad esempio "transazione massima valutata dal venditore" e così via. La classe Collectors fornisce implementazioni di molte riduzioni modificabili comuni.

Un Collector oggetto viene specificato da quattro funzioni che interagiscono per accumulare voci in un contenitore di risultati modificabile e, facoltativamente, eseguire una trasformazione finale sul risultato. Sono: <ul<>li>creation of a new result container (#supplier())</li<>>incorporare un nuovo elemento dati in un contenitore di risultati (#accumulator())</li>><combinando due contenitori di risultati in uno (#combiner())</li><li>eseguendo una trasformazione finale facoltativa nel contenitore (#finisher())</li></ul>

Gli agenti di raccolta hanno anche un set di caratteristiche, ad esempio Characteristics#CONCURRENT, che forniscono hint che possono essere usati da un'implementazione di riduzione per offrire prestazioni migliori.

Un'implementazione sequenziale di una riduzione tramite un agente di raccolta crea un singolo contenitore di risultati usando la funzione supplier e richiama la funzione dell'elemento una volta per ogni elemento di input. Un'implementazione parallela partiziona l'input, crea un contenitore di risultati per ogni partizione, accumula il contenuto di ogni partizione in un sottoresult per tale partizione e quindi usa la funzione combinatore per unire i subresult in un risultato combinato.

Per garantire che le esecuzioni sequenziali e parallele producano risultati equivalenti, le funzioni dell'agente di raccolta devono soddisfare vincoli <di identità</>em> e associatività.

Il vincolo Identity indica che per qualsiasi risultato parzialmente accumulato, combinarlo con un contenitore di risultati vuoto deve produrre un risultato equivalente. Ciò significa che per un risultato a parzialmente accumulato che è il risultato di qualsiasi serie di chiamate dell'riduttore e del combinatore, a deve essere equivalente a combiner.apply(a, supplier.get()).

Il vincolo di associatività indica che la divisione del calcolo deve produrre un risultato equivalente. Ciò significa che per tutti gli elementi t1 di input e t2, i risultati r1 e r2 nel calcolo seguente devono essere equivalenti:

{@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
            } 

Per gli agenti di raccolta che non hanno la UNORDERED caratteristica , due risultati a1 accumulati e a2 sono equivalenti se finisher.apply(a1).equals(finisher.apply(a2)). Per gli agenti di raccolta non ordinati, l'equivalenza è rilassata per consentire la mancata uguaglianza correlata alle differenze in ordine. Ad esempio, un agente di raccolta non ordinato che accumulava elementi in un List oggetto considererebbe due elenchi equivalenti se contengono gli stessi elementi, ignorando l'ordine.

Le librerie che implementano la riduzione in Collectorbase a , ad esempio Stream#collect(Collector), devono rispettare i vincoli seguenti: <ul><li>Il primo argomento passato alla funzione dell'indicizzatore, entrambi gli argomenti passati alla funzione combinatore e l'argomento passato alla funzione finisher deve essere il risultato di una precedente chiamata del fornitore dei risultati, dell'utilità di combinazione o dell'utilità di combinazione.</li><li>L'implementazione non deve eseguire alcuna operazione con il risultato di nessuna delle funzioni del fornitore di risultati, dell'indicizzatore o del combinatore diverso da passare di nuovo alle funzioni dell'utilità di combinazione, del combinatore o del finisher, oppure di restituirle al chiamante dell'operazione di riduzione.</li><Se>un risultato viene passato alla funzione combiner o finisher e lo stesso oggetto non viene restituito da tale funzione, non viene mai usato di nuovo.</li><li>Una volta passato un risultato alla funzione combiner o finisher, non viene mai passato di nuovo alla funzione dell'indicizzatore.</li><li>Per gli agenti di raccolta non simultanei, qualsiasi risultato restituito dal fornitore del risultato, dall'indicizzatore o dalle funzioni di combinatore deve essere limitato a thread serialmente. In questo modo la raccolta viene eseguita in parallelo senza dover Collector implementare alcuna sincronizzazione aggiuntiva. L'implementazione della riduzione deve gestire che l'input sia partizionato correttamente, che le partizioni vengano elaborate in isolamento e che la combinazione avvenga solo dopo il completamento dell'accumulo.</li><li>Per gli agenti di raccolta simultanei, un'implementazione è gratuita (ma non necessaria) implementare simultaneamente la riduzione. Una riduzione simultanea è uno dei casi in cui la funzione dell'riduttore viene chiamata simultaneamente da più thread, usando lo stesso contenitore di risultati modificabile contemporaneamente, anziché mantenere il risultato isolato durante l'accumulo. È consigliabile applicare una riduzione simultanea solo se l'agente di raccolta ha le Characteristics#UNORDERED caratteristiche o se i dati di origine non sono ordinati.</li></ul>

Oltre alle implementazioni predefinite in Collectors, i metodi #of(Supplier, BiConsumer, BinaryOperator, Characteristics...) factory statici possono essere usati per costruire agenti di raccolta. Ad esempio, è possibile creare un agente di raccolta che accumula widget in un TreeSet con:

{@code
                Collector<Widget, ?, TreeSet<Widget>> intoSet =
                    Collector.of(TreeSet::new, TreeSet::add,
                                 (left, right) -> { left.addAll(right); return left; });
            }

Questo comportamento viene implementato anche dall'agente di raccolta Collectors#toCollection(Supplier)predefinito .

Aggiunta nella versione 1.8.

Documentazione java per java.util.stream.Collector.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Proprietà

Handle

Ottiene il valore JNI dell'oggetto Android sottostante.

(Ereditato da IJavaObject)
JniIdentityHashCode

Restituisce il valore di java.lang.System.identityHashCode() per l'istanza di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)
JniManagedPeerState

Stato del peer gestito.

(Ereditato da IJavaPeerable)
JniPeerMembers

Supporto per l'accesso ai membri e la chiamata.

(Ereditato da IJavaPeerable)
PeerReference

Restituisce un JniObjectReference oggetto dell'istanza dell'oggetto Java di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)

Metodi

Accumulator()

Funzione che riduce un valore in un contenitore di risultati modificabile.

Characteristics()

Restituisce un valore Set di Collector.Characteristics che indica le caratteristiche di questo agente di raccolta.

Combiner()

Funzione che accetta due risultati parziali e li unisce.

Disposed()

Chiamato quando l'istanza è stata eliminata.

(Ereditato da IJavaPeerable)
DisposeUnlessReferenced()

Se non sono presenti riferimenti in sospeso a questa istanza, chiama Dispose(); in caso contrario, non esegue alcuna operazione.

(Ereditato da IJavaPeerable)
Finalized()

Chiamato quando l'istanza è stata finalizzata.

(Ereditato da IJavaPeerable)
Finisher()

Eseguire la trasformazione finale dal tipo A di accumulo intermedio al tipo di Rrisultato finale .

Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[])

Restituisce un nuovo Collector oggetto descritto dalle funzioni , accumulator, combinere finisher indicatesupplier.

Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[])

Restituisce un nuovo Collector oggetto descritto dalle funzioni , accumulator, combinere finisher indicatesupplier.

SetJniIdentityHashCode(Int32)

Impostare il valore restituito da JniIdentityHashCode.

(Ereditato da IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Operazione di riduzione modificabile che accumula gli elementi di input in un contenitore di risultati modificabile, trasformando facoltativamente il risultato accumulato in una rappresentazione finale dopo l'elaborazione di tutti gli elementi di input.

(Ereditato da IJavaPeerable)
SetPeerReference(JniObjectReference)

Impostare il valore restituito da PeerReference.

(Ereditato da IJavaPeerable)
Supplier()

Funzione che crea e restituisce un nuovo contenitore di risultati modificabile.

UnregisterFromRuntime()

Annullare la registrazione di questa istanza in modo che il runtime non lo restituisca dalle chiamate future Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Ereditato da IJavaPeerable)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Operazione di riduzione modificabile che accumula gli elementi di input in un contenitore di risultati modificabile, trasformando facoltativamente il risultato accumulato in una rappresentazione finale dopo l'elaborazione di tutti gli elementi di input.

GetJniTypeName(IJavaPeerable)

Operazione di riduzione modificabile che accumula gli elementi di input in un contenitore di risultati modificabile, trasformando facoltativamente il risultato accumulato in una rappresentazione finale dopo l'elaborazione di tutti gli elementi di input.

Si applica a