2016-12-05 8 views
1

Ich habe eine Liste von Objekten alsGruppe von in Groovy

[["GX 470","Model"],["Lexus","Make"],["Jeep","Make"],["Red","Color"],["blue","Color"]] 

folgt und ich möchte es zu transformieren, um

{"Model":["GX 470"],"Make":["Lexus","Jeep"],"Color":["Red", "blue"]} 

versuchte ich

list.groupBy{ it[1] } 

Aber das gibt mir

{"Model":[["GX 470","Model"]],"Make":[["Lexus","Make"],["Jeep","Make"]],"Color":[["Red","Color"],["blue","Color"]]} 

Antwort

2

Sie könnten Ihr Zwischenergebnis nehmen und es nur noch einen Schritt weiter verwandeln:

list.groupBy{ it[1] }.collectEntries{ k, v -> [(k):v*.get(0)] } 
3

Das liegt daran, dass groupBy das Element, von dem es gruppiert wurde, nicht aus dem ursprünglichen Objekt entfernt, sodass Sie alle Originaldaten erhalten, die nur nach einem Schlüssel gruppiert sind.

können Sie verwenden inject (und withDefault) für mehr individuelle Gruppierung:

list.inject([:].withDefault{[]}) { map, elem -> 
    map[elem[1]] << elem[0] 
    map 
}