在list<map>中,根据map某几个key值相等的累加

将list<map>中的数据按map中的某几个key值合计

 

    public static void main(String[] args) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("month", "1");
        map1.put("统计维度", "延期未发货");
        map1.put("发货额", 1289);
        list.add(map1);

        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("month", "1");
        map2.put("统计维度", "延期未发货");
        map2.put("发货额", 1289);
        list.add(map2);

        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("month", "1");
        map3.put("统计维度", " 当月新增未发货");
        map3.put("发货额", 1289);
        list.add(map3);

        Map<String, Object> map4 = new HashMap<String, Object>();
        map4.put("month", "2");
        map4.put("统计维度", " 当月新增未发货");
        map4.put("发货额", 1289);
        list.add(map4);

        Map<String, Object> map5 = new HashMap<String, Object>();
        map5.put("month", "2");
        map5.put("统计维度", " 当月新增未发货");
        map5.put("发货额", 1289);
        list.add(map5);

        Map<String, Object> map6 = new HashMap<String, Object>();
        map6.put("month", "2");
        map6.put("统计维度", "延期未发货");
        map6.put("发货额", 1289);
        list.add(map6);
        System.out.println("合并前的数据--->>>"+list);
        //根据month和统计维度两个key 合计发货额
        Map<String, Map<String, Object>> result = new HashMap<String, Map<String,Object>>();
        List<Map<String, Object>>  allList = new ArrayList<>();
        for(Map<String, Object> map : list){
            String id = map.get("month").toString();
            String date = map.get("统计维度").toString();
            String newId  = id+date;
            Long value = Long.parseLong(map.get("发货额").toString());
            if(result.containsKey(newId)){
                Long temp = Long.parseLong(result.get(newId).get("发货额").toString());
                value += temp;
                result.get(newId).put("发货额", value);
                continue;
            }
            result.put(newId, map);
            allList.add(map);
        }
        System.out.println("合并后的数据--->>>"+allList);
    }

 

实现效果:

合并前的数据--->>>[{month=1, 发货额=1289, 统计维度=延期未发货}, {month=1, 发货额=1289, 统计维度=延期未发货}, {month=1, 发货额=1289, 统计维度= 当月新增未发货}, 
          {month=2, 发货额=1289, 统计维度= 当月新增未发货}, {month=2, 发货额=1289, 统计维度= 当月新增未发货}, {month=2, 发货额=1289, 统计维度=延期未发货}]
合并后的数据
--->>>[{month=1, 发货额=2578, 统计维度=延期未发货}, {month=1, 发货额=1289, 统计维度= 当月新增未发货},
          {month=2, 发货额=2578, 统计维度= 当月新增未发货}, {month=2, 发货额=1289, 统计维度=延期未发货}]

 

posted @ 2022-03-18 19:16  LilLazy  阅读(791)  评论(0编辑  收藏  举报