Groovy 中的分组依据

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)

Bal*_*Rog 7

您可以将中间结果进一步转换为:

list.groupBy{ it[1] }.collectEntries{ k, v -> [(k):v*.get(0)] }
Run Code Online (Sandbox Code Playgroud)


tim*_*tes 5

那是因为groupBy没有从原始对象中删除它分组的元素,所以你得到所有的原始数据,只是按一个键分组。

您可以使用inject(和withDefault) 进行更多自定义分组:

list.inject([:].withDefault{[]}) { map, elem ->
    map[elem[1]] << elem[0]
    map
}
Run Code Online (Sandbox Code Playgroud)