合并map中key相同的value,产生一个新的map

遇到的一个问题:List<Map<String,Integer>>其中每个map中只有一组值,
但是这些map中有key相同的,需要将key相同的value合并成一个新的map
/**
 * 通过多个日期的map列表合并计算,产生一个map列表
 * @param dateLists
 * @return
 */
private Map<String,Integer> getHourMap(List<Map<String,Integer>> dateLists){
    Map<String,Integer> hourMap = new HashMap<>();
    for(Map<String,Integer> map:dateLists){
        for(Map.Entry<String,Integer> en:map.entrySet()){
            int newCount = en.getValue();
            if(hourMap.containsKey(en.getKey())){//结果map中有此key
                newCount += hourMap.get(en.getKey());
            }
            hourMap.put(en.getKey(),newCount);
        }
    }
    return hourMap;
}
 

测试如下

@Test
public void test3(){
    List<Map<String,Integer>> dateList = new ArrayList<>();
    Map<String,Integer> map1 = new HashMap<>();
    map1.put("0",1);
    map1.put("1",6);
    map1.put("2",4);
    map1.put("3",2);
    map1.put("4",5);
    Map<String,Integer> map2 = new HashMap<>();
    map2.put("0",0);
    map2.put("1",4);
    map2.put("2",5);
    map2.put("3",1);
    map2.put("4",2);
    dateList.add(map1);
    dateList.add(map2);
    Map<String,Integer> result = getHourMap(dateList);
    System.out.println(result);
}
结果为:{3=10, 2=10, 1=10, 0=10, 4=10}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值