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

如何基于其他值对Map中的value3进行求和合并

按多键分组并求和value3的实现方案

问题场景

现有如下Groovy列表(元素为Map结构):

def myMap = [
    [value1: "ABD123", value2: "Robert", value3: 1, value4: "7"],
    [value1: "ABD123", value2: "Robert", value3: 4, value4: "7"],
    [value1: "ABD13a23", value2: "Rob2ert", value3: 1, value4: "7"]
]

需要实现:当value1、value2、value4三者值完全相同时,将对应元素的value3求和,最终得到合并后的列表。

实现代码

def myMap = [
    [value1: "ABD123", value2: "Robert", value3: 1, value4: "7"],
    [value1: "ABD123", value2: "Robert", value3: 4, value4: "7"],
    [value1: "ABD13a23", value2: "Rob2ert", value3: 1, value4: "7"]
]

// 按指定三键分组并求和value3
def mergedMap = myMap.groupBy { item ->
    // 用三个值的组合作为分组键
    [item.value1, item.value2, item.value4]
}.collect { groupKey, items ->
    // 组装合并后的Map
    [
        value1: groupKey[0],
        value2: groupKey[1],
        value3: items.sum { it.value3 },
        value4: groupKey[2]
    ]
}

// 输出结果
mergedMap.each { println it }

代码说明

  1. 分组逻辑:通过groupBy方法,将value1、value2、value4的组合作为分组标识,把所有匹配的元素归为同一组。
  2. 求和与组装:遍历每个分组,对组内元素的value3调用sum方法求和,再结合分组键的值,生成新的Map元素。
  3. 结果验证:运行代码后,输出结果与需求完全一致:
    [value1:ABD123, value2:Robert, value3:5, value4:7]
    [value1:ABD13a23, value2:Rob2ert, value3:1, value4:7]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:06:10