在Groovy中

时间:2018-01-18 21:48:17

标签: groovy

对于按项目分组的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}

1 个答案:

答案 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]]]