Groovy:如何通过属性将地图列表合并到单个地图,将不同的地图值组合到内部列表中

时间:2020-04-08 14:26:47

标签: groovy

我想将地图列表(实际上是带有jeft连接多对多关系表的查询的结果列表)合并到一个地图,该地图将包含单个key:value对(如果它们相等)在所有映射和键中:[值列表],以防某个键的值不同。例如,有一个地图列表:

[  
[name:john, title:senior, access:floor1],  
[name:john, title:senior, access:floor2]  
]

到地图

[name:john, title:senior, access:[floor1, floor2]]

1 个答案:

答案 0 :(得分:1)

给定地图输入列表:

def input = [  
    [name:'john', title:'senior', access:'floor1'],  
    [name:'john', title:'senior', access:'floor2'],  
    [name:'carol', title:'senior', access:'floor2']
]

我们可以按前两个分组(同样,作为地图):

input.groupBy { [name: it.name, title: it.title] }

哪个给我们:

[
    [name:john, title:senior]:[
        [name:john, title:senior, access:floor1],
        [name:john, title:senior, access:floor2]
    ],
    [name:carol, title:senior]:[
        [name:carol, title:senior, access:floor2]
    ]
]

然后我们可以按照所需的输出形式将它们收集起来,给我们:

input.groupBy { [name: it.name, title: it.title] }.collect { k, v ->
    k + [access: v.access]
}

哪个给出结果:

[
    [name:john, title:senior, access:[floor1, floor2]],
    [name:carol, title:senior, access:[floor2]]
]
相关问题