2016-11-20 2 views
1

Ich versuche, eine Liste der Objekte der Klasse Product nach Produkttyp zu gruppieren. Leider ist die Art und Weise der Produktklasse wie folgt geschrieben ist:Gruppe, die Stream in Java 8 verwendet, mit Map-Wert

class Product { 
    Map<String, String> property; 
} 

Die Produktklasse enthält eine Karte von Immobilien, eine der Eigenschaften genannt wird „Product“. Zum Beispiel kann die Karte enthalten:

Wir haben eine Liste der Produkte. Ich denke, was ist die richtige Art, sie nach ProductType in Map<String, List<Product>> mit Java 8 Stream und Lambda-Ausdruck zu gruppieren.

Die Antwort liegt auf der Hand, wenn die Produktklasse definiert wurde:

class Product { 
    String ProductType; 
    Double Price; 
    String Name; 
} 

Aber mit der Definition, die wir an der Spitze, ich habe keine Ahnung, wie diese umzusetzen.

Kann jemand helfen?

+0

Können Sie den Stream anzeigen, den Sie getan haben? – brummfondel

Antwort

4

Sie können immer noch groupingBy verwenden:

List<Product> products = ... 
Map<String, List<Product>> groups = 
    products.stream() 
      .filter(p->p.property.containsKey("ProductType")) 
      .collect(Collectors.groupingBy(p->p.property.get("ProductType"))); 

Ich fügte den filter Schritt null Tasten in der Ausgabe Map zu vermeiden.

+1

Oder verwenden Sie etwas wie 'groupingBy (p-> p.property.getOrDefault (" ProductType "," ** No Type ** "))' ... – Holger