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));
Avec cette approche, pour récupérer une liste d'individus de 18 ans nommés Fred :
map.get("Fred").get(18);
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); } }
Ensuite, le regroupement peut être effectué comme suit :
Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
Pour rechercher dans les données groupées :
map.get(new NameAge("Fred", 18));
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())));
Pour récupérer de la carte :
map.get(Pair.of("Fred", 18));
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!