Maison >Java >javaDidacticiel >Comment puis-je regrouper des objets par plusieurs champs à l'aide de Java 8 Streams ?

Comment puis-je regrouper des objets par plusieurs champs à l'aide de Java 8 Streams ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-04 00:11:10784parcourir

How Can I Group Objects by Multiple Fields Using Java 8 Streams?

Le regroupement par plusieurs champs dans Java 8

Le regroupement d'objets par plusieurs noms de champs est une opération courante dans la programmation Java, et cela peut être facilement réalisé à l'aide de l'API Stream de Java 8 et de la méthode Collectors.groupingBy().

Le code fourni dans la question montre comment regrouper des objets par un seul nom de champ :

Map<Integer, List<Person>> peopleByAge = people
    .collect(Collectors.groupingBy(p -> p.age,
        Collectors.mapping((Person p) -> p, toList())));

Pour regrouper des objets par plusieurs champs, la première option consiste à enchaîner plusieurs collecteurs :

Map<String, Map<Integer, List<Person>>> map = people
    .collect(Collectors.groupingBy(Person::getName,
        Collectors.groupingBy(Person::getAge)));

Une autre option consiste à créer une classe qui représente le regroupement critères, comme NameAge dans le code suivant :

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

Enfin, il est possible d'utiliser une bibliothèque tierce comme Apache Commons Pair pour créer un objet Paire pour le regroupement :

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

En tirant parti de ces techniques de regroupement, il est possible de regrouper efficacement des objets par plusieurs noms de champs dans Java 8, offrant ainsi un moyen pratique d'organiser et d'accéder aux données en fonction de critères spécifiques.

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