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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 16:28:12950parcourir

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));

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));

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())));

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!

Déclaration:
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