集团通过在Groovy
问题描述:
我有对象的列表如下集团通过在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"]]}
答
你可以把你的中间结果,只是变换它一步:
list.groupBy{ it[1] }.collectEntries{ k, v -> [(k):v*.get(0)] }
答
这是因为groupBy
不会从原始对象中删除它所分组的元素,因此您可以获得所有原始数据,只需按键分组即可。
可以为更多的自定义分组使用inject
(和withDefault
):
list.inject([:].withDefault{[]}) { map, elem ->
map[elem[1]] << elem[0]
map
}