兩個List<Map<String,Object>> 根據關鍵字段合並成一個


/**
 * 
 * @param m1  
 * @param m2
 * @param string 根據某個key來合並
 * @return
 */
public static List<Map<String,Object>> merge(List<Map<String,Object>> m1,List<Map<String,Object>> m2,String string){
    m1.addAll(m2);
    Set<String> set = new HashSet<>();
    return m1.stream().collect(Collectors.groupingBy(o -> {
        //暫存所有key
        set.addAll(o.keySet());
        return o.get(string);
    })).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());

}

 


免責聲明!

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



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