Heim  >  Artikel  >  Java  >  Wie gruppiere ich nach mehreren Feldern in Java 8 mit „Collectors.groupingBy()'?

Wie gruppiere ich nach mehreren Feldern in Java 8 mit „Collectors.groupingBy()'?

Susan Sarandon
Susan SarandonOriginal
2024-11-24 16:28:12950Durchsuche

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

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:

  • Wenn Sie eine Eine einfache und unkomplizierte Möglichkeit, nach mehreren Feldern zu gruppieren, ist die Verkettung von Kollektoren eine pragmatische Lösung.
  • Wenn Sie einen stärker gekapselten Ansatz bevorzugen, der die Gruppierungsabsicht explizit macht, wird die Definition einer Gruppierungsklasse oder die Verwendung einer Paarklasse empfohlen.
  • Die Verfügbarkeit von Datensätzen in Java-Versionen >= 16 vereinfacht die Erstellung von Gruppierungsklassen und macht sie aus Gründen der Übersichtlichkeit und zur bevorzugten Wahl Wartbarkeit.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn