Var*_*kar 4 collections groovy grouping
我有一个对象列表如下
[["GX 470","Model"],["Lexus","Make"],["Jeep","Make"],["Red","Color"],["blue","Color"]]
Run Code Online (Sandbox Code Playgroud)
我想把它转换成
{"Model":["GX 470"],"Make":["Lexus","Jeep"],"Color":["Red", "blue"]}
Run Code Online (Sandbox Code Playgroud)
我试过
list.groupBy{ it[1] }
Run Code Online (Sandbox Code Playgroud)
但这让我回归
{"Model":[["GX 470","Model"]],"Make":[["Lexus","Make"],["Jeep","Make"]],"Color":[["Red","Color"],["blue","Color"]]}
Run Code Online (Sandbox Code Playgroud)
您可以将中间结果进一步转换为:
list.groupBy{ it[1] }.collectEntries{ k, v -> [(k):v*.get(0)] }
Run Code Online (Sandbox Code Playgroud)
那是因为groupBy
没有从原始对象中删除它分组的元素,所以你得到所有的原始数据,只是按一个键分组。
您可以使用inject
(和withDefault
) 进行更多自定义分组:
list.inject([:].withDefault{[]}) { map, elem ->
map[elem[1]] << elem[0]
map
}
Run Code Online (Sandbox Code Playgroud)