Partager via


ICollector Interface

Définition

Opération de réduction mutable qui accumule les éléments d’entrée dans un conteneur de résultats mutable, en transformant éventuellement le résultat cumulé en une représentation finale après le traitement de tous les éléments d’entrée.

[Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })]
public interface ICollector : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })>]
type ICollector = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Attributs
Implémente

Remarques

Opération de réduction mutable qui accumule les éléments d’entrée dans un conteneur de résultats mutable, en transformant éventuellement le résultat cumulé en une représentation finale après le traitement de tous les éléments d’entrée. Les opérations de réduction peuvent être effectuées séquentiellement ou en parallèle.

Parmi les exemples d’opérations de réduction mutables, citons : accumulation d’éléments dans un Collection; concaténation de chaînes à l’aide d’un StringBuilder; calcul d’informations récapitulatives sur des éléments tels que somme, min, max, max ou moyenne ; calcul des résumés de « tableau croisé dynamique » tels que « transaction maximale évaluée par vendeur », etc. La classe Collectors fournit des implémentations de nombreuses réductions mutables courantes.

Un Collector est spécifié par quatre fonctions qui fonctionnent ensemble pour accumuler des entrées dans un conteneur de résultats mutable, et éventuellement effectuer une transformation finale sur le résultat. Ils sont : <création ul><li>d’un nouveau conteneur de résultats (#supplier())</li li>><incorporant un nouvel élément de données dans un conteneur de résultats (#accumulator())</li li>><combinant deux conteneurs de résultats en un (#combiner())</li li><>effectuant une transformation finale facultative sur le conteneur (#finisher())</li></ul>

Les collecteurs ont également un ensemble de caractéristiques, telles que Characteristics#CONCURRENT, qui fournissent des indicateurs qui peuvent être utilisés par une implémentation de réduction pour fournir de meilleures performances.

Une implémentation séquentielle d’une réduction à l’aide d’un collecteur créerait un conteneur de résultats unique à l’aide de la fonction fournisseur et appelait la fonction d’accumulation une fois pour chaque élément d’entrée. Une implémentation parallèle partitionne l’entrée, crée un conteneur de résultats pour chaque partition, accumule le contenu de chaque partition dans un sous-résultat pour cette partition, puis utilise la fonction de combinaison pour fusionner les sous-résultats dans un résultat combiné.

Pour garantir que les exécutions séquentielles et parallèles produisent des résultats équivalents, les fonctions du collecteur doivent satisfaire à une <identité< em>/em> et à des contraintes d’association.

La contrainte d’identité indique que pour tout résultat partiellement accumulé, la combinaison avec un conteneur de résultats vide doit produire un résultat équivalent. Autrement dit, pour un résultat a partiellement cumulé qui est le résultat d’une série d’appels d’accumulation et de combiner, a doit être équivalent à combiner.apply(a, supplier.get()).

La contrainte d’associativité indique que le fractionnement du calcul doit produire un résultat équivalent. Autrement dit, pour tous les éléments t1 d’entrée et t2, les résultats r1 et r2 dans le calcul ci-dessous doivent être équivalents :

{@code
                A a1 = supplier.get();
                accumulator.accept(a1, t1);
                accumulator.accept(a1, t2);
                R r1 = finisher.apply(a1);  // result without splitting

                A a2 = supplier.get();
                accumulator.accept(a2, t1);
                A a3 = supplier.get();
                accumulator.accept(a3, t2);
                R r2 = finisher.apply(combiner.apply(a2, a3));  // result with splitting
            } 

Pour les collecteurs qui n’ont pas la UNORDERED caractéristique, deux résultats a1 cumulés et a2 sont équivalents si finisher.apply(a1).equals(finisher.apply(a2)). Pour les collecteurs non ordonnés, l’équivalence est assouplie pour permettre une non-égalité liée aux différences dans l’ordre. (Par exemple, un collecteur non ordonné qui a accumulé des éléments à un List serait considéré comme deux listes équivalentes s’ils contenaient les mêmes éléments, ignorant l’ordre.)

Les bibliothèques qui implémentent la réduction basée surCollector, par exempleStream#collect(Collector), doivent respecter les contraintes suivantes : <ul><li>Le premier argument passé à la fonction d’accumulation, les deux arguments passés à la fonction de combinaison, et l’argument passé à la fonction finisher doit être le résultat d’un appel précédent du fournisseur de résultats, de l’accumulation ou des fonctions de combinaison.</li li><>L’implémentation ne doit rien faire avec le résultat de l’un des fournisseurs de résultats, de l’accumulation ou des fonctions de combinaison autres que de les transmettre à l’accumulateur, au combineur ou aux fonctions finisher, ou de les retourner à l’appelant de l’opération de réduction.</li li><>Si un résultat est passé à la fonction combiner ou finisher, et que le même objet n’est pas retourné par cette fonction, il n’est jamais utilisé à nouveau.</li li><>Une fois qu’un résultat est passé à la fonction combiner ou finisher, il n’est jamais passé à la fonction d’accumulation à nouveau.</li li><>Pour les collecteurs non simultanés, tout résultat retourné par le fournisseur de résultats, l’accumulation ou les fonctions de combinaison doivent être limités en série. Cela permet à la collecte de se produire en parallèle sans Collector avoir à implémenter une synchronisation supplémentaire. L’implémentation de réduction doit gérer que l’entrée est correctement partitionnée, que les partitions sont traitées séparément et que la combinaison se produit uniquement une fois l’accumulation terminée.</li li><>Pour les collecteurs simultanés, une implémentation est gratuite (mais pas nécessaire pour) implémenter la réduction simultanément. Une réduction simultanée est celle où la fonction d’accumulation est appelée simultanément à partir de plusieurs threads, en utilisant le même conteneur de résultats modifiable simultanément, plutôt que de conserver le résultat isolé pendant l’accumulation. Une réduction simultanée ne doit être appliquée que si le collecteur a les Characteristics#UNORDERED caractéristiques ou si les données d’origine ne sont pas ordonnées.</li></ul>

En plus des implémentations prédéfinies dans Collectors, les méthodes #of(Supplier, BiConsumer, BinaryOperator, Characteristics...) de fabrique statique peuvent être utilisées pour construire des collecteurs. Par exemple, vous pouvez créer un collecteur qui accumule des widgets dans un TreeSet avec :

{@code
                Collector<Widget, ?, TreeSet<Widget>> intoSet =
                    Collector.of(TreeSet::new, TreeSet::add,
                                 (left, right) -> { left.addAll(right); return left; });
            }

(Ce comportement est également implémenté par le collecteur Collectors#toCollection(Supplier)prédéfini).

Ajouté dans la version 1.8.

Documentation Java pour java.util.stream.Collector.

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

Handle

Obtient la valeur JNI de l’objet Android sous-jacent.

(Hérité de IJavaObject)
JniIdentityHashCode

Retourne la valeur de java.lang.System.identityHashCode() l’instance encapsulée.

(Hérité de IJavaPeerable)
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

Accumulator()

Fonction qui plie une valeur dans un conteneur de résultats mutable.

Characteristics()

Retourne un Set indicateur des Collector.Characteristics caractéristiques de ce collecteur.

Combiner()

Fonction qui accepte deux résultats partiels et les fusionne.

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 Dispose(); sinon, ne fait rien.

(Hérité de IJavaPeerable)
Finalized()

Appelé lorsque l’instance a été finalisée.

(Hérité de IJavaPeerable)
Finisher()

Effectuez la transformation finale du type A d’accumulation intermédiaire au type Rde résultat final.

Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[])

Retourne un nouveau Collector décrit par les fonctions, et combineraccumulatorfinisher les fonctions données.supplier

Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[])

Retourne un nouveau Collector décrit par les fonctions, et combineraccumulatorfinisher les fonctions données.supplier

SetJniIdentityHashCode(Int32)

Définissez la valeur retournée par JniIdentityHashCode.

(Hérité de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Opération de réduction mutable qui accumule les éléments d’entrée dans un conteneur de résultats mutable, en transformant éventuellement le résultat cumulé en une représentation finale après le traitement de tous les éléments d’entrée.

(Hérité de IJavaPeerable)
SetPeerReference(JniObjectReference)

Définissez la valeur retournée par PeerReference.

(Hérité de IJavaPeerable)
Supplier()

Fonction qui crée et retourne un nouveau conteneur de résultats mutable.

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)

Opération de réduction mutable qui accumule les éléments d’entrée dans un conteneur de résultats mutable, en transformant éventuellement le résultat cumulé en une représentation finale après le traitement de tous les éléments d’entrée.

GetJniTypeName(IJavaPeerable)

Opération de réduction mutable qui accumule les éléments d’entrée dans un conteneur de résultats mutable, en transformant éventuellement le résultat cumulé en une représentation finale après le traitement de tous les éléments d’entrée.

S’applique à