Heim > Java > javaLernprogramm > Wie kann ich Daten mithilfe von Java 8 Streams nach mehreren Feldern gruppieren?

Wie kann ich Daten mithilfe von Java 8 Streams nach mehreren Feldern gruppieren?

DDD
Freigeben: 2024-11-26 11:13:09
Original
922 Leute haben es durchsucht

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

Gruppierung nach mehreren Feldern in Java 8

Beim Gruppieren von Objekten nach einem Feldnamen stellt Java 8 die Methode Collectors.groupingBy() bereit. Was aber, wenn wir nach mehreren Feldern gruppieren müssen?

Option 1: Collectors verketten

Ein Ansatz besteht darin, mehrere Collectors.groupingBy()-Aufrufe zu verketten:

1

2

3

Map<String, Map<Integer, List<Person>>> map = people

                .collect(Collectors.groupingBy(Person::getName,

                        Collectors.groupingBy(Person::getAge)));

Nach dem Login kopieren

Dadurch wird eine verschachtelte Karte erstellt, bei der die erste Ebene nach Namen und die zweite Ebene nach Alter gruppiert ist. So rufen Sie eine Liste 18-jähriger Personen namens Fred ab:

1

map.get("Fred").get(18);

Nach dem Login kopieren

Option 2: Definieren eines Gruppierungsdatensatzes

Alternativ können wir eine Klasse erstellen ( B. NameAge), der die Gruppierungsfelder darstellt:

1

2

3

4

5

6

class NameAge implements Comparable<NameAge> {

    String name;

    int age;

     

    // Constructor, getters, compareTo, etc.

}

Nach dem Login kopieren

Dann gruppieren Sie nach NameAge Datensatz:

1

2

Map<NameAge, List<Person>> map = people

                .collect(Collectors.groupingBy(Person::getNameAge));

Nach dem Login kopieren

Abrufen:

1

map.get(new NameAge("Fred", 18));

Nach dem Login kopieren

Option 3: Verwendung der Paarklasse

Wenn die Implementierung eines benutzerdefinierten Gruppierungsdatensatzes unerwünscht ist, Wir können eine Paarklasse aus Bibliotheken wie Apache Commons oder Javas neuem java.util.function.Pair verwenden. Zum Beispiel mit Apache Commons:

1

2

Map<Pair<String, Integer>, List<Person>> map =

                people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));

Nach dem Login kopieren

Abrufen:

1

map.get(Pair.of("Fred", 18));

Nach dem Login kopieren

Empfehlung

Die Wahl des Ansatzes hängt von den spezifischen Anforderungen ab . Datensätze bieten eine prägnante und klare Lösung, für komplexere Szenarien können jedoch Bibliotheken wie Apache Commons bevorzugt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Daten mithilfe von Java 8 Streams nach mehreren Feldern gruppieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage