Ich habe eine Liste von pojos, die ich einige Gruppierung durchführen möchte. Etwas wie:Java 8 lambdas Gruppierung von mehreren Feldern
public class Pojo {
private final Category category;
private final BigDecimal someValue;
}
public class Category {
private final String majorCategory;
private final String minorCategory;
}
möchte ich eine Map<String, Map<String, List<Pojo>>>
, wo der Schlüssel majorCategory
ist und der Wert ist ein Map
mit Schlüssel minorCategory
und Werte ist ein List
von Pojo
Objekte für die minorCategory
.
Ich beabsichtige, Java 8 Lambdas zu verwenden, um dies zu erreichen. Ich kann mit dem Anschluss an die erste Ebene der Gruppierung getan:
Map<String, Pojo> result = list
.stream()
.collect(groupingBy(p -> p.getCategory().getMajorCategory()));
Wie kann ich Gruppe nun wieder auf minorCategory
und bekommen die Map<String, Map<String, List<Pojo>>>
ich wünsche?
aktualisiert
Die erste Antwort zur Verfügung gestellt für das Beispiel zunächst seit aktualisiert, jedoch unter der Voraussetzung richtig ist ich die Frage habe. Rubens Kommentar in der angenommenen Antwort liefert das letzte Puzzleteil.
Danke dafür funktioniert das für das Beispiel in meiner Frage, aber ich habe vielleicht zu stark vereinfacht. Ich gruppiere tatsächlich auf einem Feld auf einem Objekt, das in meinem Pojo enthalten ist, genannt, sagen wir, Kategorie. Ich habe versucht '.collect (groupingBy (p -> p.getCategory(). GetMajorCategory(), groupingBy (p -> p.getCategory(). GetMinorCategory()))) aber es schneidet nicht den Senf. Hast du irgendwelche Ideen? –
@RobertBain list.stream(). Sammeln (groupingBy ((Pojo p) -> p.getCategory(). GetMajorCategory(), groupingBy ((Pojo p) -> p.getCategory(). getMinorCategory()))); – Ruben
Was ist der Unterschied zwischen allen Antworten ..? –