Maison > Java > javaDidacticiel > le corps du texte

Comment puis-je regrouper des données par plusieurs champs dans Java 8 à l'aide de « Collectors.groupingBy() » ?

Patricia Arquette
Libérer: 2024-11-24 10:27:11
original
636 Les gens l'ont consulté

How Can I Group Data by Multiple Fields in Java 8 Using `Collectors.groupingBy()`?

Regroupement par plusieurs champs dans Java 8, au-delà du regroupement par champ unique

Le regroupement d'objets par un seul champ est une opération courante dans le traitement des données. Cependant, des scénarios peuvent survenir dans lesquels un regroupement par plusieurs champs est nécessaire. L'extrait de code initial fourni montre le regroupement par champ d'âge. Cet article examine les options de regroupement par plusieurs champs du même POJO.

Chaînage des collecteurs

Une approche simple consiste à enchaîner plusieurs collecteurs. Le code ci-dessous démontre cette technique :

Map<String, Map<Integer, List<Person>>> map = people
    .collect(Collectors.groupingBy(Person::getName,
        Collectors.groupingBy(Person::getAge));
Copier après la connexion

Avec cette approche, pour récupérer une liste d'individus de 18 ans nommés Fred :

map.get("Fred").get(18);
Copier après la connexion

Définir un enregistrement de regroupement

Créer une classe qui représente le regroupement est une autre méthode. Ici, un enregistrement est utilisé pour représenter la combinaison du nom et de l'âge :

class Person {
    record NameAge(String name, int age) {}

    public NameAge getNameAge() {
        return new NameAge(name, age);
    }
}
Copier après la connexion

Ensuite, le regroupement peut être effectué comme suit :

Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
Copier après la connexion

Pour rechercher dans les données groupées :

map.get(new NameAge("Fred", 18));
Copier après la connexion

Utilisation de classes de paires à partir de bibliothèques-cadres

Bibliothèques comme Apache Commons, propose des classes de paires pour ce type de scénario. Avec une classe paire, la clé de la carte peut être construite comme :

Map<Pair<String, Integer>, List<Person>> map =
    people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
Copier après la connexion

Pour récupérer de la carte :

map.get(Pair.of("Fred", 18));
Copier après la connexion

Conclusion

La méthode Collectors.groupingBy() de Java 8 offre une flexibilité dans le regroupement des données. Cet article a démontré différentes approches pour étendre le regroupement au-delà d'un seul champ, notamment le chaînage de collecteurs, la définition d'un enregistrement de regroupement personnalisé et l'utilisation de classes de paires à partir de bibliothèques-cadres. De plus, les enregistrements en Java facilitent la définition de critères de regroupement sans avoir besoin de classes personnalisées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal