ISpliterator Schnittstelle

Definition

Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle.

[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
Abgeleitet
Attribute
Implementiert

Hinweise

Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle. Die Quelle von Elementen, die von einem Spliterator abgedeckt werden, kann z. B. ein Array, ein CollectionE/A-Kanal oder eine Generatorfunktion sein.

Ein Spliterator kann Elemente einzeln (#tryAdvance tryAdvance()) oder sequenziell in Massen (#forEachRemaining forEachRemaining()) durchlaufen.

Ein Spliterator kann auch einige seiner Elemente (mit #trySplit) als ein anderer Spliterator partitionieren, um in möglicherweise parallelen Vorgängen verwendet zu werden. Vorgänge, die einen Spliterator verwenden, der nicht geteilt werden kann oder dies in hohem Maße unausgeglichen oder ineffizient ist, sind wahrscheinlich nicht von Parallelität profitieren. Durchqueren und Teilen von Auspuffelementen; Jeder Spliterator ist nur für eine einzelne Massenberechnung nützlich.

Ein Spliterator meldet auch eine Reihe von #characteristics() Strukturen, Quellen und Elementen aus , zwischen #ORDERED, #DISTINCT, , #SORTED, #SIZED, #NONNULL, , #IMMUTABLE, , #CONCURRENTund #SUBSIZED. Diese können von Spliterator-Clients eingesetzt werden, um die Berechnung zu steuern, zu spezialisieren oder zu vereinfachen. Beispielsweise würde ein Spliterator für einen Collection Bericht SIZED, ein Spliterator für einen Set Bericht DISTINCTund ein Spliterator für einen SortedSet Bericht auch berichten SORTED. Die Merkmale werden als einfaches unioniertes Bit-Set gemeldet.

Einige Merkmale beschränken zusätzlich das Verhalten der Methode; Wenn z. B ORDERED. die Traversalmethoden ihrer dokumentierten Reihenfolge entsprechen müssen. Neue Merkmale können in Zukunft definiert werden, sodass Implementierungen keine Bedeutungen für nicht aufgelistete Werte zuweisen sollten.

"Binding">Ein Spliterator, der c IMMUTABLE</c> oder <c>GLEICHZEITIG</c> nicht meldet<>, wird erwartet, dass eine dokumentierte Richtlinie zu folgendem Thema vorhanden ist: wenn der Spliterator <em>an die Elementquelle bindet</em> und die Erkennung struktureller Störungen der Elementquelle, die nach der Bindung erkannt wurde. Ein <em late-binding<>/em> Spliterator bindet an die Quelle von Elementen am Punkt des ersten Durchgangs, der ersten Unterbrechung oder der ersten Abfrage nach geschätzter Größe, anstatt zu dem Zeitpunkt, zu dem der Spliterator erstellt wird. Ein Spliterator, der nicht <spät>gebunden</em> ist, bindet an die Quelle von Elementen an den Zeitpunkt der Konstruktion oder den ersten Aufruf einer Methode. Änderungen, die vor der Bindung an der Quelle vorgenommen wurden, werden angezeigt, wenn der Spliterator durchlaufen wird. Nach der Bindung sollte ein Spliterator auf best-effort-Basis ausgelöst ConcurrentModificationException werden, wenn strukturelle Störungen erkannt werden. Spliteratoren, die dies tun, werden als em>fail-fast</em> bezeichnet<. Die Massendurchquerungsmethode (#forEachRemaining forEachRemaining()) eines Spliterators kann die Traversal- und Überprüfung auf strukturelle Störungen optimieren, nachdem alle Elemente durchlaufen wurden, anstatt die einzelnen Elemente zu überprüfen und sofort fehlschlagen zu müssen.

Spliteratoren können eine Schätzung der Anzahl der verbleibenden Elemente über die #estimateSize Methode bereitstellen. Im Idealfall entspricht dieser Wert genau der Anzahl der Elemente, #SIZEDdie bei einer erfolgreichen Durchquerung gefunden würden. Selbst wenn er nicht genau bekannt ist, kann ein geschätzter Wert jedoch dennoch für Vorgänge nützlich sein, die auf der Quelle ausgeführt werden, z. B. um festzustellen, ob es vorzuziehen ist, die verbleibenden Elemente sequenziell aufzuteilen oder zu durchlaufen.

Trotz ihres offensichtlichen Nutzens in parallelen Algorithmen werden Spliteratoren nicht erwartet, dass sie threadsicher sind; Stattdessen sollten Implementierungen paralleler Algorithmen mit Spliteratoren sicherstellen, dass der Spliterator jeweils nur von einem Thread verwendet wird. Dies ist im Allgemeinen leicht über <die>serielle Threadeinschränkung</em> zu erreichen, was oft eine natürliche Folge typischer paralleler Algorithmen ist, die durch rekursive Dekomposition funktionieren. Ein Threadaufruf #trySplit() kann den zurückgegebenen Spliterator an einen anderen Thread übergeben, der wiederum den Spliterator durchlaufen oder weiter teilen kann. Das Verhalten von Splitting und Traversal ist nicht definiert, wenn zwei oder mehr Threads gleichzeitig auf demselben Spliterator arbeiten. Wenn der ursprüngliche Thread einen Spliterator zur Verarbeitung an einen anderen Thread ausgibt, ist es am besten, wenn diese Übergabe vor dem Verbrauch #tryAdvance(Consumer) tryAdvance()von Elementen erfolgt, da bestimmte Garantien (z. B. die Genauigkeit für #estimateSize()SIZED Spliteratoren) nur gültig sind, bevor die Durchquerung begonnen hat.

Primitive Untertypspezialisierungen werden Spliterator für OfInt int, OfLong longund OfDouble double Werte bereitgestellt. Die Standardimplementierungen des Untertyps und Spliterator#forEachRemaining(java.util.function.Consumer) der Spliterator#tryAdvance(java.util.function.Consumer) Feldgrundtypen für Instanzen ihrer entsprechenden Wrapperklasse. Solche Boxen können leistungsvorteile untergraben, die durch die Verwendung der Grundtypspezialisierungen gewonnen wurden. Um Boxen zu vermeiden, sollten die entsprechenden primitiven Methoden verwendet werden. Beispielsweise Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) sollte und Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) sollte in den Einstellungen Spliterator.OfInt#tryAdvance(java.util.function.Consumer) und Spliterator.OfInt#forEachRemaining(java.util.function.Consumer). Durchqueren von grundtypischen Werten mithilfe von boxbasierten Methoden #tryAdvance tryAdvance() und #forEachRemaining(java.util.function.Consumer) forEachRemaining() wirkt sich nicht auf die Reihenfolge aus, in der die Werte, die in Boxwerte transformiert werden, gefunden werden.

Hinzugefügt in 1.8.

Java-Dokumentation für java.util.Spliterator.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Eigenschaften

Comparator

Wenn die Quelle #SORTED dieses Spliterators von einem Comparator, gibt dies Comparatorzurück.

ExactSizeIfKnown

Convenience-Methode, die zurückgibt #estimateSize() , wenn dieser Spliterator ist #SIZED, sonst -1.

Handle

Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab.

(Geerbt von IJavaObject)
JniIdentityHashCode

Gibt den Wert java.lang.System.identityHashCode() für die umbrochene Instanz zurück.

(Geerbt von IJavaPeerable)
JniManagedPeerState

Status des verwalteten Peers.

(Geerbt von IJavaPeerable)
JniPeerMembers

Mitgliedszugriff und Aufrufunterstützung.

(Geerbt von IJavaPeerable)
PeerReference

Gibt eine JniObjectReference der umbrochenen Java-Objektinstanz zurück.

(Geerbt von IJavaPeerable)

Methoden

Characteristics()

Gibt eine Reihe von Merkmalen dieses Spliterators und seiner Elemente zurück.

Disposed()

Wird aufgerufen, wenn die Instanz verworfen wurde.

(Geerbt von IJavaPeerable)
DisposeUnlessReferenced()

Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen Dispose(). Andernfalls wird nichts ausgeführt.

(Geerbt von IJavaPeerable)
EstimateSize()

Gibt eine Schätzung der Anzahl der Elemente zurück, die von einem #forEachRemaining Traversal erkannt werden, oder gibt zurück Long#MAX_VALUE , wenn unendlich, unbekannt oder zu teuer zu berechnen ist.

Finalized()

Wird aufgerufen, wenn die Instanz abgeschlossen wurde.

(Geerbt von IJavaPeerable)
ForEachRemaining(IConsumer)

Führt die angegebene Aktion für jedes verbleibende Element sequenziell im aktuellen Thread aus, bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme auslöst.

HasCharacteristics(Int32)

Gibt zurück true , wenn dieser Spliterator #characteristics alle gegebenen Merkmale enthält.

SetJniIdentityHashCode(Int32)

Legen Sie den von JniIdentityHashCode.

(Geerbt von IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle.

(Geerbt von IJavaPeerable)
SetPeerReference(JniObjectReference)

Legen Sie den von PeerReference.

(Geerbt von IJavaPeerable)
TryAdvance(IConsumer)

Wenn ein verbleibendes Element vorhanden ist, führt sie die angegebene Aktion aus, und gibt truezurück ; sonst wird zurückgegeben false.

TrySplit()

Wenn dieser Spliterator partitioniert werden kann, wird ein Spliterator zurückgegeben, der Elemente abdeckt, die auf der Rückgabe von dieser Methode nicht von diesem Spliterator abgedeckt werden.

UnregisterFromRuntime()

Heben Sie die Registrierung dieser Instanz auf, damit die Laufzeit sie nicht aus zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt.

(Geerbt von IJavaPeerable)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle.

GetJniTypeName(IJavaPeerable)

Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle.

Gilt für: