2016-12-05 85 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 
}