ISpliterator Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 Collection
canale 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
#NONNULL
e .#SUBSIZED
Questi possono essere utilizzati dai client Spliterator per controllare, specializzare o semplificare il calcolo. Ad esempio, un spliterator per un Collection
report SIZED
sarebbe , un spliterator per un Set
report DISTINCT
e un spliterator per un SortedSet
report SORTED
anche . 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 int
i valori , OfLong long
e 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 è |
ExactSizeIfKnown |
Metodo pratico che restituisce |
Handle |
Ottiene il valore JNI dell'oggetto Android sottostante. (Ereditato da IJavaObject) |
JniIdentityHashCode |
Restituisce il valore di |
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 |
EstimateSize() |
Restituisce una stima del numero di elementi rilevati da un |
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 |
SetJniIdentityHashCode(Int32) |
Impostare il valore restituito da |
SetJniManagedPeerState(JniManagedPeerStates) |
Oggetto per l'attraversamento e il partizionamento di elementi di un'origine. (Ereditato da IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Impostare il valore restituito da |
TryAdvance(IConsumer) |
Se esiste un elemento rimanente, esegue l'azione specificata su di essa, restituendo ; else restituisce |
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. |