美文网首页
Java把多个list 合并成一个并去重

Java把多个list 合并成一个并去重

作者: 不二家的糖果屋 | 来源:发表于2020-05-17 19:38 被阅读0次

    Java把多个list 合并成一个并去重

           开发过程中遇到一个合并去重问题,任务完成后,总结出来一个比较简单的方法。对于List中不同类型的数据,需要采用不同的处理方式。List中如果是基础数据类型,直接合并去重即可;如果是对象类型,则需要借助Map去重,这里判断是否重复的标准为用户id等区分度高的属性,如果相等,就属于重复数据。

    测试用例用户实体类取《一步步搭建 Spring Boot maven 框架的工程》中的User,再添加一个业务需求细节:如果list1和list2中的数据重复,则客户姓名以list2为准。

    publicstaticvoid main(String[] args) {

            List list1 =newArrayList<>();

            User user01 =new User();

            user01.setId(1L);

            user01.setName("Bell");

            list1.add(user01);

            User user02 =new User();

            user02.setId(2L);

            user02.setName("Jack");

            list1.add(user02);

            List list2 =newArrayList<>();

            User user03 =new User();

            user03.setId(2L);

            user03.setName("Tom");

            list2.add(user03);

            User user04 =new User();

            user04.setId(3L);

            user04.setName("Tao");

            list2.add(user04);

            Map target =newHashMap();

            if(CollectionUtils.isNotEmpty(list1) &&CollectionUtils.isNotEmpty(list2)) {

    //把list1放入Map target中,key取用户id

    for (User tempUser : list1) {

                    target.put(tempUser.getId(), tempUser);

                }

                for (User user2 : list2) {

                    Long userId = user2.getId();

                    if (target.containsKey(userId)) {

                        User temp = target.get(userId);

                        // 用户id重复,以list2中的用户姓名为准                    temp.setName(user2.getName());

                        target.put(userId, temp);

                    } else {

                        target.put(userId, user2);

                    }

                }

            }

            List list =newArrayList(target.values());

            System.out.println("对象数据类型的list合并并且去重结果====>:" + list);

    }

        /**    * 基础数据类型的list合并并且去重,业务场景比较简单

        */privatestaticvoid intList() {

            List list1 =newArrayList();

            list1.add(1);

            list1.add(2);

            list1.add(3);

            list1.add(4);

            List list2 =newArrayList();

            list2.add(1);

            list2.add(4);

            list2.add(7);

            list2.add(10);

            List listAll =newArrayList();

            listAll.addAll(list1);

            listAll.addAll(list2);

            // 去重listAll =newArrayList(newLinkedHashSet<>(listAll));

            System.out.println("方法一:" + listAll);

            list1.removeAll(list2);

            list1.addAll(list2);

            System.out.println("方法二:" + list1);

        }

    相关文章

      网友评论

          本文标题:Java把多个list 合并成一个并去重

          本文链接:https://www.haomeiwen.com/subject/vwqvkhtx.html