Maison > Java > javaDidacticiel > le corps du texte

Comment regrouper par plusieurs champs dans Java 8 à l'aide de « Collectors.groupingBy() » ?

Susan Sarandon
Libérer: 2024-11-24 16:28:12
original
951 Les gens l'ont consulté

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

Regroupement par plusieurs champs en Java 8

Dans Java 8, la méthode Collectors.groupingBy() est couramment utilisée pour regrouper des objets en fonction de un domaine spécifique. Cependant, que se passe-t-il si vous devez regrouper par plusieurs champs d'un même POJO ?

Plusieurs options sont disponibles :

Chaînage des collecteurs

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

Ce code regroupe les objets Personne d'abord par nom puis par âge, ce qui donne une structure cartographique imbriquée.

Définition une classe de regroupement

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

    public NameAge getNameAge() {
        return new NameAge(name, age);
    }
}

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

En créant un enregistrement ou une classe qui encapsule les critères de regroupement (par exemple, NameAge), vous pouvez directement regrouper selon les champs souhaités.

Utilisation d'une classe paire

import org.apache.commons.lang3.tuple.Pair;

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

Si vous utilisez une bibliothèque tierce, vous pouvez tirer parti sa classe de paires pour représenter les critères de regroupement.

Choisir la meilleure option

Le choix de l'approche dépend des exigences spécifiques de votre projet :

  • Si vous avez besoin d'un moyen simple et direct de regrouper par plusieurs champs, enchaîner les collecteurs est une solution pragmatique.
  • Si vous préférez une méthode plus une approche encapsulée qui rend l'intention de regroupement explicite, la définition d'une classe de regroupement ou l'utilisation d'une classe de paire est recommandée.
  • La disponibilité des enregistrements dans les versions Java >= 16 simplifie la création de classes de regroupement, ce qui en fait un choix privilégié pour plus de clarté et de maintenabilité.

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