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

合并ArrayList中同Key的HashMap值问题求助

解决ArrayList<HashMap<String, Integer>>合并同Key值的问题

嘿,我懂你遇到的麻烦了——多个HashMap里碰到相同Key时,没法把对应的值加总到一起对吧?其实不用在嵌套循环里绕弯路,咱们换个简单的思路,用一个临时HashMap来做累加就搞定了。

核心思路

先搞一个临时的HashMap<String, Integer>,它的作用就是帮咱们把相同Key的值攒起来(毕竟HashMap本身就不允许重复Key,天生适合干这个活)。然后遍历你原有的expense列表,把每个小HashMap里的键值对都提取出来,更新到临时Map里。最后再把临时Map里的每一组键值对转换成单独的HashMap,塞进新的newExpense列表就行。

完整代码示例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class ExpenseMerge {
    public static void main(String[] args) {
        // 初始化你的原始expense列表
        ArrayList<HashMap<String, Integer>> expense = new ArrayList<>();
        
        HashMap<String, Integer> food1 = new HashMap<>();
        food1.put("food", 300);
        expense.add(food1);
        
        HashMap<String, Integer> entertainment = new HashMap<>();
        entertainment.put("entertainment", 100);
        expense.add(entertainment);
        
        HashMap<String, Integer> food2 = new HashMap<>();
        food2.put("food", 500);
        expense.add(food2);
        
        // 步骤1:用临时Map累加相同Key的值
        HashMap<String, Integer> tempSumMap = new HashMap<>();
        for (HashMap<String, Integer> singleExpense : expense) {
            // 遍历每个小HashMap里的键值对(哪怕小Map里有多个键值对也适用)
            for (Map.Entry<String, Integer> entry : singleExpense.entrySet()) {
                String key = entry.getKey();
                int value = entry.getValue();
                // 累加逻辑:Key存在就取现有值加新值,不存在就直接存新值
                tempSumMap.put(key, tempSumMap.getOrDefault(key, 0) + value);
            }
        }
        
        // 步骤2:把临时Map转成你需要的newExpense列表
        ArrayList<HashMap<String, Integer>> newExpense = new ArrayList<>();
        for (Map.Entry<String, Integer> entry : tempSumMap.entrySet()) {
            HashMap<String, Integer> mergedMap = new HashMap<>();
            mergedMap.put(entry.getKey(), entry.getValue());
            newExpense.add(mergedMap);
        }
        
        // 验证结果
        for (HashMap<String, Integer> map : newExpense) {
            System.out.println(map);
        }
        // 输出:{food=800}、{entertainment=100}
    }
}

为什么你的嵌套循环没成功?

大概率是因为你在嵌套循环里没处理好“Key存在时累加”的逻辑——比如可能每次碰到相同Key就直接覆盖了旧值,而不是把新旧值相加。或者是没用到中间容器暂存累加结果,导致每次循环都在原列表里折腾,逻辑越绕越乱。上面这个方法把累加和构建新列表拆成两步,逻辑清晰多了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:01:16