两个Map<String, Decimal>或map数组,相同的key,值相加,不同则保留。

一、两个Map相同key相加,不同则保留

public static void main(String[] args) {
        Map map1 = new HashMap<>();
        Map map2 = new HashMap<>();

        map1.put("a", BigDecimal.ONE);
        map1.put("b", BigDecimal.ONE);
        map1.put("c", BigDecimal.ONE);

        map2.put("a", BigDecimal.TEN);
        map2.put("b", BigDecimal.TEN);
        map2.put("d", BigDecimal.TEN);

        System.out.println(map1);
        System.out.println(map2);

        for (String key : map1.keySet()){
            if (map2.containsKey(key)){
                map2.put(key, map2.get(key).add(map1.get(key)));
            } else {
                map2.put(key, map1.get(key));
            }
        }

        System.out.println(map2);
    }

运行结果: 

二、同理List >集合,相同KEY的value值相加,不同则保留的方法

public static void main(String[] args) {
        // map数组
        List> mapList = new ArrayList<>();
        // 结果数组
        Map mapResult = new HashMap<>();

        Map map1 = new HashMap<>();
        Map map2 = new HashMap<>();

        map1.put("a", BigDecimal.ONE);
        map1.put("b", BigDecimal.ONE);
        map1.put("c", BigDecimal.ONE);

        map2.put("a", BigDecimal.TEN);
        map2.put("b", BigDecimal.TEN);
        map2.put("d", BigDecimal.TEN);

        System.out.println(map1);
        System.out.println(map2);
        // map数组中有两个map
        mapList.add(map1);
        mapList.add(map2);

        // 遍历map数组,将数组中key相同的值相加,key不同的值保留,结果放到mapResult中
        mapList.forEach(map -> {
            for (String key : map.keySet()){
                if (mapResult.containsKey(key)){
                    mapResult.put(key, mapResult.get(key).add(map.get(key)));
                } else {
                    mapResult.put(key, map.get(key));
                }
            }
        });

        System.out.println(mapResult);
    }

运行结果:

 

你可能感兴趣的:(java,jvm,开发语言)