java处理List<Map<String, BigDecimal>>,将相同key的value值相加

该文章描述了一个名为`mergeAndSum`的方法,用于合并输入的Map列表,根据月份累加num字段的BigDecimal值。它通过StreamAPI实现,确保重复月份的值会被相加得到汇总数据。
摘要由CSDN通过智能技术生成
List<Map<String, BigDecimal>> =  [{month=1, num=1}, {month=2, num=3}, {month=3, num=1},{month=2, num=13}, {month=3, num=11}, {month=1, num=62}]
private static List<Map<String, BigDecimal>> mergeAndSum(List<Map<String, BigDecimal>> allData) {
        return allData.stream().collect(Collectors.toMap(
                map -> String.valueOf(map.get("month")),
                map -> map,
                        (oldMap, newMap) -> {
                            BigDecimal oldNUM= oldMap.get("num");
                            BigDecimal newNUM = newMap.get("num");
                            oldMap.put("num", oldTCO2.add(newnum));
                            return oldMap;
                        }))
                .values().stream()
                .collect(Collectors.toList());
    }
  1. Stream化输入列表:首先,使用allData.stream()将输入的List<Map<String, BigDecimal>>转换为一个Stream流。

  2. 使用Collectors.toMap进行收集

    • 键提取器map -> String.valueOf(map.get("month")),将每个内部Map中的"month"键对应的值(假设为Integer类型)转换为String,作为新Map的键。
    • 值提取器map -> map,直接使用每个内部Map作为新Map的值。
    • 合并函数(oldMap, newMap) -> {...},当遇到相同键时,执行此函数进行合并操作。具体步骤如下:
      • 获取旧MapoldMap)中"num"键对应的BigDecimaloldNum
      • 获取新MapnewMap)中"num"键对应的BigDecimalnewnum。
      • 将两个BigDecimal值相加,结果存储回旧Map的"tco2"键中:oldMap.put("num", oldnum.add(newnum))
      • 返回合并后的旧Mapreturn oldMap;
    • 这个过程将所有输入数据合并到一个新的Map<String, Map<String, BigDecimal>>中,其中键为月份字符串,值为包含更新后"num"值的内部Map
  3. 提取合并后Map的值列表:调用.values().stream()获取合并后Map的所有值(即内部Map),然后使用Collectors.toList()将这些值(内部Map)收集到一个新的List<Map<String, BigDecimal>>中。

最终,mergeAndSum方法返回一个列表,其中包含了合并并累加"num"值后的各个月份排放数据。例如,如果输入列表中有两个或更多月份的数据重叠,这些数据的"tco2"值会在合并过程中被相加,形成一个汇总后的月度排放数据列表。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值