在Groovy中分组

时间:2016-12-05 18:59:58

标签: 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":[["Lexus","Make"],["Jeep","Make"]],"Color":[["Red","Color"],["blue","Color"]]}

3 个答案:

答案 0 :(得分:3)

这是因为 groupBy 不会从原始对象中删除它所分组的元素,因此您可以获得所有原始数据,只需按键分组。


& #xA;

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




  list.inject([:]。withDefault {[]}){map,elem  - >
 map [elem [1]]<< ELEM [0]
地图
}
  



答案 1 :(得分:3)

您可以采取中间结果,然后再将其转换一步:

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

答案 2 :(得分:0)

id