Gruppierung nach mehreren Feldern in Java 8
In Java 8 wird die Methode Collectors.groupingBy() häufig zum Gruppieren von Objekten basierend auf verwendet ein bestimmtes Feld. Was aber, wenn Sie nach mehreren Feldern aus demselben POJO gruppieren müssen?
Es stehen mehrere Optionen zur Verfügung:
Collectors verketten
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge));
Dieser Code gruppiert die Personenobjekte zuerst nach Namen und dann nach Alter, was zu einer verschachtelten Karte führt Struktur.
Definieren einer Gruppierungsklasse
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));
Indem Sie einen Datensatz oder eine Klasse erstellen, die die Gruppierungskriterien (z. B. NameAge) kapselt, können Sie direkt nach gruppieren gewünschte Felder.
Verwenden eines Paares Klasse
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())));
Wenn Sie eine Bibliothek eines Drittanbieters verwenden, können Sie deren Paarklasse nutzen, um die Gruppierungskriterien darzustellen.
Auswahl der besten Option
Die Wahl des Ansatzes hängt von den spezifischen Anforderungen Ihres Projekts ab:
Das obige ist der detaillierte Inhalt vonWie gruppiere ich nach mehreren Feldern in Java 8 mit „Collectors.groupingBy()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!