ISpliterator Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Objet permettant de parcourir et de partitionner des éléments d’une source.
[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
- Dérivé
- Attributs
- Implémente
Remarques
Objet permettant de parcourir et de partitionner des éléments d’une source. La source des éléments couverts par un Spliterator peut être, par exemple, un tableau, un Collection
canal d’E/S ou une fonction de générateur.
Un fractionneur peut parcourir des éléments individuellement (#tryAdvance tryAdvance()
) ou séquentiellement en bloc (#forEachRemaining forEachRemaining()
).
Un fractionneur peut également partitionner certains de ses éléments (à l’aide #trySplit
) comme un autre séparateur, à utiliser dans des opérations éventuellement parallèles. Les opérations utilisant un séparateur qui ne peut pas fractionner, ou le fait de manière hautement déséquilibrée ou inefficace, ne sont pas susceptibles de bénéficier du parallélisme. Traversal et fractionnement des éléments d’échappement ; chaque fractionneur est utile pour un seul calcul en bloc.
Un fractionneur signale également un ensemble de #characteristics()
sa structure, de sa source et de ses éléments parmi #ORDERED
, , #SORTED
#DISTINCT
, , #SIZED
, , #NONNULL
, , #IMMUTABLE
#CONCURRENT
et #SUBSIZED
. Ceux-ci peuvent être utilisés par les clients Spliterator pour contrôler, spécialiser ou simplifier le calcul. Par exemple, un séparateur d’un Collection
rapport SIZED
de fractionnement , un séparateur pour un Set
rapport d’un rapport DISTINCT
et un séparateur pour un SortedSet
rapport signale SORTED
également . Les caractéristiques sont signalées sous la forme d’un simple jeu de bits unioné.
Certaines caractéristiques limitent également le comportement des méthodes ; par exemple, si ORDERED
les méthodes traversées doivent être conformes à leur classement documenté. De nouvelles caractéristiques peuvent être définies à l’avenir. Les implémenteurs ne doivent donc pas affecter de significations à des valeurs non répertoriées.
« binding « >A Spliterator qui ne signale <pas c>IMMUTABLE</c ou <c>> CONCURRENT</c> est censé avoir une stratégie documentée concernant : quand le fractionneur <em>lie</em> à la source de l’élément ; et la détection d’interférence structurelle de la source d’élément détectée après la liaison. >Un <séparateur em late-binding</em> est lié à la source des éléments au point de la première traversée, du premier fractionnement ou de la première requête pour une taille estimée, plutôt qu’au moment de la création du spliterator. Un séparateur qui n’est pas <>em late-binding</em> lie à la source des éléments au point de construction ou d’appel d’une première méthode. Les modifications apportées à la source avant la liaison sont reflétées lorsque l’analyseur de fractionnement est parcouru. Après la liaison d’un fractionneur, sur une base optimale, lèvez ConcurrentModificationException
si des interférences structurelles sont détectées. Les séparateurs qui effectuent cette opération sont appelés <em>fail-fast</em>. La méthode de traversée en bloc (#forEachRemaining forEachRemaining()
) d’un spliterator peut optimiser la traversée et vérifier les interférences structurelles après que tous les éléments ont été parcourus, plutôt que de vérifier par élément et d’échouer immédiatement.
Les fractionneurs peuvent fournir une estimation du nombre d’éléments restants via la #estimateSize
méthode. Dans l’idéal, comme indiqué dans la caractéristique #SIZED
, cette valeur correspond exactement au nombre d’éléments qui seraient rencontrés dans une traversée réussie. Toutefois, même si elle n’est pas exactement connue, une valeur estimée peut toujours être utile pour les opérations effectuées sur la source, telles que l’aide à déterminer s’il est préférable de fractionner davantage ou de parcourir les éléments restants de manière séquentielle.
Malgré leur utilité évidente dans les algorithmes parallèles, les séparateurs ne sont pas censés être thread-safe ; Au lieu de cela, les implémentations d’algorithmes parallèles utilisant des séparateurs doivent s’assurer que le fractionneur n’est utilisé que par un seul thread à la fois. Cela est généralement facile à atteindre via <>em serial thread-confinement</em>, qui est souvent une conséquence naturelle d’algorithmes parallèles classiques qui fonctionnent par la décomposition récursive. Un appel #trySplit()
de thread peut remettre le fractionneur retourné à un autre thread, qui peut à son tour traverser ou fractionner davantage ce spliterator. Le comportement de fractionnement et de traversée n’est pas défini si deux threads ou plus fonctionnent simultanément sur le même séparateur. Si le thread d’origine affecte un séparateur à un autre thread pour le traitement, il est préférable que ce transfert se produise avant que les éléments ne soient consommés avec #tryAdvance(Consumer) tryAdvance()
, car certaines garanties (telles que la précision des fractionneurs) ne sont valides que avant le début de #estimateSize()
SIZED
la traversée.
Les spécialisations de sous-type primitives sont Spliterator
fournies pour OfInt int
, OfLong long
et OfDouble double
les valeurs. Implémentations par défaut par défaut de sous-types de Spliterator#tryAdvance(java.util.function.Consumer)
Spliterator#forEachRemaining(java.util.function.Consumer)
valeurs primitives box à des instances de leur classe wrapper correspondante. Cette boxe peut compromettre les avantages de performances obtenus à l’aide des spécialisations primitives. Pour éviter la boxe, les méthodes primitives correspondantes doivent être utilisées. Par exemple, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)
et Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)
doit être utilisé en préférence pour Spliterator.OfInt#tryAdvance(java.util.function.Consumer)
et Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)
. Traversée de valeurs primitives à l’aide de méthodes #tryAdvance tryAdvance()
basées sur la boxe et #forEachRemaining(java.util.function.Consumer) forEachRemaining()
n’affecte pas l’ordre dans lequel les valeurs, transformées en valeurs boxées, sont rencontrées.
Ajouté dans la version 1.8.
Documentation Java pour java.util.Spliterator
.
Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.
Propriétés
Comparator |
Si la source de ce splitérateur est |
ExactSizeIfKnown |
Méthode pratique qui retourne |
Handle |
Obtient la valeur JNI de l’objet Android sous-jacent. (Hérité de IJavaObject) |
JniIdentityHashCode |
Retourne la valeur de |
JniManagedPeerState |
État de l’homologue managé. (Hérité de IJavaPeerable) |
JniPeerMembers |
Prise en charge de l’accès aux membres et de l’appel. (Hérité de IJavaPeerable) |
PeerReference |
Retourne une JniObjectReference instance d’objet Java encapsulée. (Hérité de IJavaPeerable) |
Méthodes
Characteristics() |
Retourne un ensemble de caractéristiques de ce Spliterator et de ses éléments. |
Disposed() |
Appelé lorsque l’instance a été supprimée. (Hérité de IJavaPeerable) |
DisposeUnlessReferenced() |
S’il n’existe aucune référence en suspens à cette instance, les appels |
EstimateSize() |
Retourne une estimation du nombre d’éléments qui seraient rencontrés par une |
Finalized() |
Appelé lorsque l’instance a été finalisée. (Hérité de IJavaPeerable) |
ForEachRemaining(IConsumer) |
Effectue l’action donnée pour chaque élément restant, de manière séquentielle dans le thread actuel, jusqu’à ce que tous les éléments aient été traités ou que l’action lève une exception. |
HasCharacteristics(Int32) |
Retourne |
SetJniIdentityHashCode(Int32) |
Définissez la valeur retournée par |
SetJniManagedPeerState(JniManagedPeerStates) |
Objet permettant de parcourir et de partitionner des éléments d’une source. (Hérité de IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Définissez la valeur retournée par |
TryAdvance(IConsumer) |
Si un élément restant existe, effectue l’action donnée sur celle-ci, en retournant |
TrySplit() |
Si ce fractionneur peut être partitionné, retourne un séparateur couvrant les éléments, qui, à partir de cette méthode, ne sera pas couvert par ce spliterator. |
UnregisterFromRuntime() |
Annulez l’inscription de cette instance afin que le runtime ne le retourne pas à partir d’appels futurs Java.Interop.JniRuntime+JniValueManager.PeekValue . (Hérité de IJavaPeerable) |
Méthodes d’extension
JavaCast<TResult>(IJavaObject) |
Effectue une conversion de type vérifiée par le runtime Android. |
JavaCast<TResult>(IJavaObject) |
Objet permettant de parcourir et de partitionner des éléments d’une source. |
GetJniTypeName(IJavaPeerable) |
Objet permettant de parcourir et de partitionner des éléments d’une source. |