两个List快速合并

在日常的开发中经常遇见需要对两个List<Map<String,Object>>合并后的数据进行处理,常用的方法无非是各自for循环再合并成一个新的List<Map<String,Object>>,不论效率还是业务上都非常复杂。

针对此情况,利用Java 8 Lambda可以快速将两个List<Map<String,Object>>合并,还可以对list排序

话不多说,直接上代码

public static void  main(String[] args) {
    List<Map<String, Object>> list1 = new ArrayList<>();
    List<Map<String, Object>> list2 = new ArrayList<>();
    Map map1 = new HashMap();
    Map map2 = new HashMap();
    Map map3 = new HashMap();
    Map map4 = new HashMap();
    map1.put("id",1);
    map1.put("name","张三");
    map2.put("id",2);
    map2.put("name","李四");
    map3.put("id",3);
    map3.put("name","王五");
    map4.put("id",4);
    map4.put("name","赵六");
    list1.add(map1);
    list1.add(map2);
    list2.add(map3);
    list2.add(map4);
    System.out.println("lsit1是"+list1);
结果:lsit1是[{name=张三, id=1}, {name=李四, id=2}]
    System.out.println("list2是"+list2);
结果:list2是[{name=王五, id=3}, {name=赵六, id=4}]
    List<Map<String, Object>> newList = ListUtil.merge(list1,list2);
    System.out.println("新的List<Map>是"+newList);
结果:新的List<Map>是[{name=张三, id=1}, {name=李四, id=2}, {name=王五, id=3}, {name=赵六, id=4}]
public  class ListUtil {
    public static List<Map<String, Object>> merge(List<Map<String, Object>> m1, List<Map<String, Object>> m2){

        m1.addAll(m2);

        Set<String> set = new HashSet<>();

        return m1.stream()
                .collect(Collectors.groupingBy(o->{
                    //暂存所有key
                    set.addAll(o.keySet());
                    //按a_id分组
                    return o.get("id");
                })).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());
    }
发布了8 篇原创文章 · 获赞 6 · 访问量 294

猜你喜欢

转载自blog.csdn.net/weixin_43952697/article/details/105575469
今日推荐