2016-12-05 107 views
1

我有對象的列表如下集團通過在Groovy

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

,我想將它轉化爲

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

我試圖

list.groupBy{ it[1] } 

但是,返回我

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

回答

2

你可以把你的中間結果,只是變換它一步:

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

這是因爲groupBy不會從原始對象中刪除它所分組的元素,因此您可以獲得所有原始數據,只需按鍵分組即可。

可以爲更多的自定義分組使用inject(和withDefault):

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