jdk1.8 操作List 多個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 的數據類型,數據類型不一樣,分組出的結果不一樣。

組裝成的數據格式如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM