合并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
相关产品推荐
相关产品推荐

