2016-11-02 2 views
4

Transforming habe ich eine List<Model>:eine Liste der Modelle in eine Karte mit einer inneren Karte mit Java 8 Streams

[ 
    {parent: "parent", child: "child1", sensor: "wohoo"}, 
    {parent: "parent", child: "child1", sensor: "bla"}, 
    {parent: "parent", child: "child2", sensor: "wohoo2"} 
] 

und ich möchte es auf eine <String, Map<String, List<String>>> Karte zu transformieren.

{ 
    parent: { 
    child1: ["wohoo", "bla"], 
    child2: ["wohoo2"] 
    }, 
} 

Ich habe dies versucht:

Map<String, Map<String, List<String>>> test = currentlyReportingAgents 
     .stream() 
     .collect(Collectors.groupingBy(
     Model::getParent, 
     Collectors.groupingBy(Model::getChild, Collectors.toList()))); 

aber einige verdrahteten Kompilierungsfehlern bekam .. Was bin ich?

Edit: einen Screenshot des Fehlers Hinzugefügt: enter image description here

+2

Bitte fügen Sie die Kompilierungsfehler in Ihre Frage ein. – khelwood

Antwort

3

Ihre Lösung gibt einen anderen Typ:

Map<String, Map<String, List<Model>>> = ...; 

Um das zu erreichen, was Sie wollen, müssen Sie eine List<Model> in eine List<String> durch das drehen mapping(mapper, downstream):

Map<String, Map<String, List<String>>> r = currentlyReportingAgents.stream() 
    .collect(groupingBy(Model::getParent, 
         groupingBy(Model::getChild, mapping(Model::getChild, toList())))); 
+0

Schön. Füge ein 'r.forEach ((k, v) -> System.out.println (k +" :: "+ v)) hinzu;' und alles erwacht zum Leben. – mohsenmadi

Verwandte Themen