zoukankan      html  css  js  c++  java
  • jdk1.8 操作List<Map> 多个map 具有相同的key 进行分组合并重组数据

    一:我们有这么一列数据:

    数据格式 

    m1的数据格式如下:  margeKey 是 要按照 那个key来进行分组,key 名字

    [{active_user=2, company_id=13}, {active_user=1, company_id=126}, {company_id=13, material_num=13}, {company_id=126, material_num=2}, {company_id=13, learning_duration=4315.0}, {company_id=126, learning_duration=5.0}, {company_id=13, daily_answer_times=2}, {company_id=126, daily_answer_times=2}, {company_id=126, exam_times=1}]

    使用如下代码,组装成:

    代码如下:

     public static List<Map<String, Object>> merge(List<TreeMap<String, Object>> m1,String mergeKey){
            Set<String> set = new HashSet<>();
            System.out.println("m1的数据格式是:"+m1);
            return m1.stream()
                    .filter(map->map.get(mergeKey)!=null)
                    .collect(Collectors.groupingBy(o->{
                        //暂存所有key
                        set.addAll(o.keySet());
                        //按mergeKey分组
                        return o.get(mergeKey).toString();
                    }))
                    .entrySet().stream().map(o->{
                        //合并
                        Map<String, Object> map = o.getValue().stream().flatMap(m->{
                            return m.entrySet().stream();
                        }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a,b)->b));
                        //为没有的key赋值0
                        set.stream().forEach(k->{
                            if(!map.containsKey(k)) map.put(k, 0);
                        });
                        return map;
                    }).collect(Collectors.toList());
    
        }
    // 一些个人碰坑总结:
    // 通过分组的时候,一定的注意 分组的key 的value 的数据类型,数据类型不一样,分组出的结果不一样。

    组装成的数据格式如下:

  • 相关阅读:
    【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
    异常控制流
    链接
    最小生成树的Prim算法(待修正版)
    最小生成树的Kruskal算法
    优先队列用法(转载)
    不相交集合的链表实现
    寻找通用汇点
    找零问题
    【Angular06】管道(类似vue的过滤器)、变更检测的工作原理
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/12420455.html
Copyright © 2011-2022 走看看