Java 8 Verschachtelte (Multilevel) Gruppe nach

8

Ich habe wenige Klassen wie unten

%Vor%

Ich möchte die Elemente basierend auf key1 aggregieren und für jede Aggregation sollten Unterelemente folgendermaßen nach key2 aggregiert werden:

%Vor%

Wie ist das mit Java 8 Collectors.groupingBy nesting?

möglich

Ich habe etwas versucht und bin bei halbem Weg steckengeblieben

%Vor%

Hinweis: Dies ist nicht dasselbe wie kaskadiertes groupingBy , das eine mehrstufige Aggregation basierend auf Feldern im selben Objekt wie hier

    
Sandesh Kumar 24.08.2016, 18:01
quelle

1 Antwort

14

Sie können ein einzelnes Element nicht mit mehreren Schlüsseln gruppieren, es sei denn, Sie akzeptieren, dass das Element möglicherweise in mehreren Gruppen angezeigt wird. In diesem Fall möchten Sie eine Art flatMap -Operation ausführen.

Eine Möglichkeit, dies zu erreichen, ist die Verwendung von Stream.flatMap mit einem temporären Paar, das die Kombinationen von Item und SubItem vor dem Sammeln enthält. Aufgrund des Fehlens eines Standard-Paartyps ist es eine typische Lösung, Map.Entry dafür zu verwenden:

%Vor%

Eine Alternative, die diese temporären Objekte nicht benötigt, wäre das Ausführen der Operation flatMap im Kollektor, aber leider flatMapping wird dort nicht bis Java 9 sein.

Damit würde die Lösung aussehen wie

%Vor%

Wenn wir nicht auf Java 9 warten wollen, können wir unserer Codebasis einen ähnlichen Collector hinzufügen, da es nicht so schwer zu implementieren ist:

%Vor%     
Holger 24.08.2016, 18:56
quelle