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. È improbabile che le operazioni che usano un spliterator che non può suddividere o farlo in modo altamente sbilanciato o inefficiente, traggono vantaggio dal parallelismo. Attraversamento e divisione degli elementi di esaurimento; ogni spliterator è utile solo per un singolo calcolo bulk.

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

Alcune caratteristiche vincolano anche il comportamento del metodo; ad esempio se ORDERED, i metodi di attraversamento devono essere conformi all'ordinamento 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> deve avere un criterio documentato relativo a: quando il spliterator <em>binds</em> all'origine dell'elemento e il rilevamento di interferenze strutturali dell'origine dell'elemento rilevata dopo l'associazione. Un <em late-binding</em>> Spliterator viene associato all'origine degli elementi al momento della prima operazione di attraversamento, prima divisione o prima query per le dimensioni stimate, anziché al momento della creazione del spliterator. Spliterator che non <è em>late-binding/em> esegue l'associazione< 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 aver azionato un Spliterator, è consigliabile generare ConcurrentModificationException un'interferenza strutturale se viene rilevata un'interferenza strutturale. Gli 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 la presenza di interferenze strutturali dopo che tutti gli elementi sono stati attraversati, invece di controllare per elemento ed eseguire immediatamente l'errore.

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 ovvia utilità negli algoritmi paralleli, gli 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>serial thread-confinement</em>, che spesso è una conseguenza naturale di algoritmi paralleli tipici che funzionano dalla 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 che l'handoff si verifichi prima che gli elementi vengano utilizzati con #tryAdvance(Consumer) tryAdvance(), come determinate garanzie (ad esempio l'accuratezza di per SIZED gli 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 i vantaggi delle prestazioni ottenuti usando le specializzazioni primitive. Per evitare la conversione boxing, è consigliabile usare i metodi basati su primitivi corrispondenti. Ad esempio, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) e Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) devono essere usati in preferenza per 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 Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Proprietà

Comparator

Se l'origine di questo spliterator è #SORTED di un Comparatoroggetto , restituisce l'oggetto Comparator.

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 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 rilevati da un #forEachRemaining attraversamento o restituisce Long#MAX_VALUE se il calcolo è infinito, sconosciuto o troppo costoso.

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 true. In caso contrario, restituisce false.

TrySplit()

Se questo spliterator può essere partizionato, restituisce un spliterator che copre gli elementi, che verrà restituito da questo metodo, non verrà coperto 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 verificato 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