前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA合并两个具有相同key的map为list

JAVA合并两个具有相同key的map为list

作者头像
一诺千金
发布2020-04-30 00:59:50
4.1K0
发布2020-04-30 00:59:50
举报
文章被收录于专栏:郭家一诺千金郭家一诺千金

JAVA合并两个具有相同key的map为list,不多说,直接上代码:

代码语言:javascript
复制
/**
 * list合并类
 */
public class MapUtil {

    public static void  main(String[] args){
        List<Map<String,String>> osvList = new ArrayList<>();
        Map<String,String> map1 = new HashMap<>();
        map1.put("osV","5.1");
        map1.put("gaidNum","100");
        Map<String,String> map2 = new HashMap<>();
        map2.put("osV","4.4.2");
        map2.put("gaidNum","150");
        osvList.add(map1);
        osvList.add(map2);
        List<Map<String,String>> ipList = new ArrayList<>();
        Map<String,String> map3 = new HashMap<>();
        map3.put("osV","5.1");
        map3.put("ipNum","200");
        Map<String,String> map4 = new HashMap<>();
        map4.put("osV","4.4.2");
        map4.put("ipNum","300");
        ipList.add(map3);
        ipList.add(map4);
        List<Map<String,String>> mapsList = new ArrayList<>();
        mapsList.add(map1);
        mapsList.add(map3);
        System.out.println("mapsList="+mapsList);
        List<Map<String,String>> megeList = merge(mapsList,"osV");
        System.out.println("megeList="+megeList);
    }

    /**
     * 合并两个具有相同key的map为list
     * @param m1 要合并的list
     * @param mergeKey 以哪个key为基准合并
     * @return
     */
    public static List<Map<String, String>> merge(List<Map<String, String>> m1, String mergeKey){
        Set<String> set = new HashSet<>();
        return m1.stream()
                .filter(map->map.get(mergeKey)!=null)
                .collect(Collectors.groupingBy(o->{
                    set.addAll(o.keySet());//暂存所有key
                    return o.get(mergeKey).toString(); //按mergeKey分组
                }))
                .entrySet().stream().map(o->{
                    Map<String, String> map = o.getValue().stream().flatMap(m->{ //合并
                        return m.entrySet().stream();
                    }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a,b)->b));
                    set.stream().forEach(k->{//为没有的key赋值0
                        if(!map.containsKey(k)) map.put(k, "0");
                    });
                    return map;
                }).collect(Collectors.toList());
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年04月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档