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

Groovy多属性分组提取值:实现灵活多层嵌套映射方案

通用Groovy多层嵌套列表转Map实现

这里有一个灵活的通用方法,可以轻松处理任意层级的嵌套转换,彻底解决层级增多时代码嵌套繁琐、可读性差的问题:

def nest(List items, List keys, String valueKey = 'value') {
    items.inject([:]) { map, item ->
        def current = map
        // 逐层构建嵌套Map,直到倒数第二层
        keys[0..-2].each { key ->
            def keyValue = item[key]
            current[keyValue] = current[keyValue] ?: [:]
            current = current[keyValue]
        }
        // 为最后一层键设置对应的值
        def lastKey = keys[-1]
        current[item[lastKey]] = item[valueKey]
        map
    }
}

方法说明

这个方法的三个参数作用如下:

  • items: 需要转换的原始列表
  • keys: 按嵌套层级顺序排列的键名列表(比如要实现两层嵌套就传['category', 'name'],四层嵌套就传['category', 'subcategory', 'group', 'name'])
  • valueKey: 存储目标值的键名,默认是'value',可以根据实际场景修改

示例1:两层嵌套转换

原始列表:

List list = [ 
    [category: 'A', name: 'a', value: 10], 
    [category: 'A', name: 'b', value: 20], 
    [category: 'B', name: 'a', value: 30], 
    [category: 'B', name: 'c', value: 40], 
    [category: 'B', name: 'd', value: 50], 
]

调用方法:

def resultMap = nest(list, ['category', 'name'])

转换结果:

[ A: [a: 10, b: 20], B: [a: 30, c: 40, d: 50] ]

示例2:四层嵌套转换

原始列表:

List list = [ 
    [category: 'A', subcategory: 'I', group: 'x', name: 'a', value: 10], 
    [category: 'A', subcategory: 'I', group: 'y', name: 'b', value: 20], 
]

调用方法:

def resultMap = nest(list, ['category', 'subcategory', 'group', 'name'])

转换结果:

[ A: [I: [ x: [a: 10], y: [b: 20] ]] ]

这个实现的优势在于完全不需要根据嵌套层级修改核心逻辑,只需要调整keys参数的顺序和数量就能适配任意层级的转换需求,代码简洁易读,维护成本低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:59:50