Groovy中的groupby
我有一个对象列表如下Groovy中的groupby,groovy,collections,grouping,Groovy,Collections,Grouping,我有一个对象列表如下 [["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
[["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"]]}
这是因为
groupBy
不会从原始对象中删除它分组所依据的元素,因此您只需按一个键分组即可获得所有原始数据
您可以使用inject
(和withDefault
)进行更多自定义分组:
list.inject([:].withDefault{[]}) { map, elem ->
map[elem[1]] << elem[0]
map
}
list.inject([:].withDefault{[]}){map,elem->
映射[elem[1]]您可以将中间结果进一步转换:
list.groupBy{ it[1] }.collectEntries{ k, v -> [(k):v*.get(0)] }
list.groupBy{ it[1] }.collect { key,value -> value.get(0) }