groovy - Groovy:如何通过属性将地图列表合并到单个地图,将不同的地图值组合到内部列表中
问题描述
我想将地图列表(实际上是带有 jeft join 多对多关系表的查询的结果列表)合并到一个地图中,如果它们在所有地图中都相等,则该地图将包含一个键:值对和 key:[list-of-values] 以防某个键的值不同。例如有一个地图列表:
[
[name:john, title:senior, access:floor1],
[name:john, title:senior, access:floor2]
]
到地图
[name:john, title:senior, access:[floor1, floor2]]
解决方案
所以给定一个地图的输入列表:
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]]
]
推荐阅读
- javascript - 在 Laravel 表单上上传或绘制签名
- bash - 你如何强制苹果脚本 + aws vault 等待 mfa 访问
- r - 如何从 R 运行 orca?
- php - 向 Woocommerce 发送的电子邮件添加元素的最佳实践
- scala - 如何在 Flink-Scala 中做简单的缓存文件?
- python-3.x - 将 yfinance 数据帧转换为多索引数据帧
- richtextbox - 有没有办法在网页上生成内容丰富的富文本?
- opencv - 使用 Charuco 校准相机时抽取的目的是什么?
- swift - 每当我在 tableView 行中选择一行时,Swift 都无法到达目标类
- javascript - classList.toggle() 只工作一次