在Groovy中的Group By

5
我有一个对象列表,如下所示。
[["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"]]}
3个回答

8
你可以将中间结果直接进行一步转换:
list.groupBy{ it[1] }.collectEntries{ k, v -> [(k):v*.get(0)] }

5
那是因为groupBy不会从原始对象中删除它分组的元素,所以你可以得到所有原始数据,只是按键分组而已。
你可以使用inject(以及withDefault)进行更多自定义分组:
list.inject([:].withDefault{[]}) { map, elem ->
    map[elem[1]] << elem[0]
    map
}

-1
list.groupBy{ it[1] }.collect { key,value -> value.get(0) }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接