Condividi tramite


ISpliterator Interfaccia

Definizione

Oggetto per l'attraversamento e il partizionamento di elementi di un'origine.

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

Commenti

Oggetto per l'attraversamento e il partizionamento di elementi di un'origine. L'origine degli elementi coperti da un spliterator può essere, ad esempio, una matrice, un Collectioncanale di I/O o una funzione generatore.

Un spliterator può attraversare gli elementi singolarmente (#tryAdvance tryAdvance()) o in sequenza in blocco (#forEachRemaining forEachRemaining()).

Un spliterator può anche partizionare alcuni dei relativi elementi (usando #trySplit) come un altro Spliterator, da usare in operazioni possibilmente parallele. Le operazioni che usano un spliterator che non è in grado di suddividere, o di farlo in modo altamente sbilanciato o inefficiente, potrebbero trarre vantaggio dal parallelismo. Attraversamento e divisione degli elementi di esaurimento; ogni Spliterator è utile solo per un singolo calcolo bulk.

Un spliterator segnala anche un set di #characteristics() strutture, origini ed elementi da tra #ORDERED, #NONNULL#DISTINCT#SIZED#IMMUTABLE#SORTED#CONCURRENTe .#SUBSIZED Questi possono essere utilizzati dai client Spliterator per controllare, specializzare o semplificare il calcolo. Ad esempio, un Spliterator per un Collection oggetto segnala SIZED, un Spliterator per un Set report DISTINCTe un Spliterator per un oggetto SortedSet segnala SORTEDanche . Le caratteristiche vengono segnalate come set di bit unione semplice.

Alcune caratteristiche vincolano inoltre il comportamento del metodo; ad esempio se ORDERED, i metodi di attraversamento devono essere conformi all'ordine documentato. Le nuove caratteristiche possono essere definite in futuro, pertanto gli implementatori non devono assegnare significati ai valori non elencati.

"binding">Un spliterator che non segnala <c>IMMUTABLE</c> o <c>CONCURRENT</c> dovrebbe avere un criterio documentato relativo a: quando il spliterator <em>binds</em> all'origine dell'elemento; e il rilevamento dell'interferenza strutturale dell'origine dell'elemento rilevato dopo l'associazione. Un <em late-binding</em>> Spliterator si associa all'origine degli elementi al momento della prima attraversamento, prima divisione o prima query per le dimensioni stimate, anziché al momento della creazione del spliterator. Spliterator che non <è em>late-binding</em> si associa all'origine degli elementi al momento della costruzione o della prima chiamata di qualsiasi metodo. Le modifiche apportate all'origine prima dell'associazione vengono riflesse quando il spliterator viene attraversato. Dopo l'associazione di un spliterator deve, in base al massimo sforzo, generare ConcurrentModificationException se viene rilevata un'interferenza strutturale. I spliterator che eseguono questa operazione sono denominati <em>fail-fast</em>. Il metodo di attraversamento bulk (#forEachRemaining forEachRemaining()) di un spliterator può ottimizzare l'attraversamento e verificare l'interferenza strutturale dopo che tutti gli elementi sono stati attraversati, invece di controllare per elemento e non riuscire immediatamente.

I spliterator possono fornire una stima del numero di elementi rimanenti tramite il #estimateSize metodo . Idealmente, come illustrato nella caratteristica #SIZED, questo valore corrisponde esattamente al numero di elementi che verrebbero rilevati in un attraversamento riuscito. Tuttavia, anche se non è esattamente noto, un valore stimato può comunque essere utile per le operazioni eseguite sull'origine, ad esempio per determinare se è preferibile suddividere ulteriormente o attraversare gli elementi rimanenti in sequenza.

Nonostante la loro evidente utilità negli algoritmi paralleli, i spliterator non dovrebbero essere thread-safe; Al contrario, le implementazioni di algoritmi paralleli che usano spliterator devono garantire che il spliterator venga usato solo da un thread alla volta. Questo è in genere facile da raggiungere tramite <em>thread-confinement</em> seriale, che spesso è una conseguenza naturale di algoritmi paralleli tipici che funzionano con la scomposizione ricorsiva. Una chiamata #trySplit() di thread può passare il Spliterator restituito a un altro thread, che a sua volta può attraversare o dividere ulteriormente tale spliterator. Il comportamento di divisione e attraversamento non è definito se due o più thread operano simultaneamente sullo stesso spliterator. Se il thread originale passa un spliterator a un altro thread per l'elaborazione, è preferibile se tale handoff si verifica prima che gli elementi vengano utilizzati con #tryAdvance(Consumer) tryAdvance(), come determinate garanzie (ad esempio l'accuratezza di per SIZED i spliterator) sono valide solo prima dell'avvio dell'attraversamento#estimateSize().

Le specializzazioni del sottotipo primitivo di Spliterator vengono fornite per OfInt inti valori , OfLong longe OfDouble double . Implementazioni predefinite del sottotipo di Spliterator#tryAdvance(java.util.function.Consumer) e Spliterator#forEachRemaining(java.util.function.Consumer) valori primitivi box nelle istanze della classe wrapper corrispondente. Tale boxing può compromettere eventuali vantaggi delle prestazioni ottenuti usando le specializzazioni primitive. Per evitare il boxing, è necessario usare i metodi primitivi corrispondenti. Ad esempio, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) e Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) deve essere usato in preferenza a Spliterator.OfInt#tryAdvance(java.util.function.Consumer) e Spliterator.OfInt#forEachRemaining(java.util.function.Consumer). Attraversamento di valori primitivi tramite metodi #tryAdvance tryAdvance() basati su boxing e #forEachRemaining(java.util.function.Consumer) forEachRemaining() non influisce sull'ordine in cui vengono rilevati i valori, trasformati in valori boxed.

Aggiunta nella versione 1.8.

Documentazione java per java.util.Spliterator.

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à

Comparator

Se l'origine di spliterator è #SORTED di un Comparatoroggetto , restituisce tale Comparatoroggetto .

ExactSizeIfKnown

Metodo pratico che restituisce #estimateSize() se questo spliterator è #SIZED, altrimenti -1.

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

Characteristics()

Restituisce un set di caratteristiche di questo spliterator e dei relativi elementi.

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)
EstimateSize()

Restituisce una stima del numero di elementi che verrebbero rilevati da un #forEachRemaining attraversamento o restituisce Long#MAX_VALUE se infinito, sconosciuto o troppo costoso da calcolare.

Finalized()

Chiamato quando l'istanza è stata finalizzata.

(Ereditato da IJavaPeerable)
ForEachRemaining(IConsumer)

Esegue l'azione specificata per ogni elemento rimanente, in sequenza nel thread corrente, fino a quando tutti gli elementi non vengono elaborati o l'azione genera un'eccezione.

HasCharacteristics(Int32)

Restituisce true se l'oggetto #characteristics Spliterator contiene tutte le caratteristiche indicate.

SetJniIdentityHashCode(Int32)

Impostare il valore restituito da JniIdentityHashCode.

(Ereditato da IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Oggetto per l'attraversamento e il partizionamento di elementi di un'origine.

(Ereditato da IJavaPeerable)
SetPeerReference(JniObjectReference)

Impostare il valore restituito da PeerReference.

(Ereditato da IJavaPeerable)
TryAdvance(IConsumer)

Se esiste un elemento rimanente, esegue l'azione specificata su di essa, restituendo ; else restituisce truefalse.

TrySplit()

Se questo spliterator può essere partizionato, restituisce un spliterator che copre gli elementi, che verranno restituiti da questo metodo, non essere coperti da questo spliterator.

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)

Oggetto per l'attraversamento e il partizionamento di elementi di un'origine.

GetJniTypeName(IJavaPeerable)

Oggetto per l'attraversamento e il partizionamento di elementi di un'origine.

Si applica a