You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy中Map嵌套分组问题:按公共值分组生成嵌套结构

Groovy嵌套Map分组解决方案

输入数据

def input = [
    [user: 'andy', name: 'Andrew', role: 'dev', roleDesc: 'Developer'],
    [user: 'andy', name: 'Andrew', role: 'sup', roleDesc: 'Supervisor'],
    [user: 'pat', name: 'Patricia', role: 'man', roleDesc: 'Manager'],
    [user: 'pat', name: 'Patricia', role: 'sup', roleDesc: 'Supervisor']
]

期望输出

[
    [user: 'andy', name: 'Andrew', roles: [[role: 'dev', roleDesc: 'Developer'], [role: 'sup', roleDesc: 'Supervisor']]],
    [user: 'pat', name: 'Patricia', roles: [[role: 'man', roleDesc: 'Manager'], [role: 'sup', roleDesc: 'Supervisor']]]
]

正确实现代码

def result = input.groupBy { [it.user, it.name] }.collect { key, entries ->
    [
        user: key[0],
        name: key[1],
        roles: entries.collect { [role: it.role, roleDesc: it.roleDesc] }
    ]
}

// 打印结果验证
println(result)

代码说明

  1. groupBy分组:用[it.user, it.name]作为分组键,将相同user和name的条目归为同一组
  2. collect转换结构:遍历每个分组,提取分组键中的user和name,再将分组内的每个条目单独取出role和roleDesc组成新Map,最后把这些新Map收集为roles列表
  3. 此方式避免了之前的键值合并错误,因为每个条目都独立生成包含role和roleDesc的Map,而非将同键值合并成单一列表

内容的提问来源于stack exchange,提问作者Dan V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:05:21