对于按项目分组的Groovy关联数组,如何在每个组中选择一个子集?
在下文中,我如何为每个id
选择2个项目?
assocarray = [ ["id":1, "num":1], ["id":1, "num":2],
["id":1, "num":3], ["id":1, "num":4], ["id":1, "num":5],
["id":2, "num":1], ["id":2, "num":2], ["id":2, "num":3],
["id":2, "num":4], ["id":2, "num":5]]
.groupBy {it.id}
答案 0 :(得分:0)
您可以使用take(n)
从集合中获取n
个元素。 E.g。
def data = [[id:1, num:1], [id:1, num:2], [id:1, num:3], [id:1, num:4], [id:1, num:5], [id:2, num:1], [id:2, num:2], [id:2, num:3], [id:2, num:4], [id:2, num:5]]
// XXX take(2) from the values
println data.groupBy{it.id}.collectEntries{[it.key, it.value.take(2)]}
// => [1:[[id:1, num:1], [id:1, num:2]], 2:[[id:2, num:1], [id:2, num:2]]]