java 怎么把多个list 合并成一个去掉重复的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎么把多个list 合并成一个去掉重复的相关的知识,希望对你有一定的参考价值。

List接口中,有一个方法addAll,可以实现合并list。 List a=new ArrayList(); List b=new ArrayList(); b.addAll(a); 合并出来的List就是b,而不是一个新的List . 如果创建新的可以: ArrayList c=(ArrayList )a.clone; c.addAll(b); 参考技术A 利用set集合的排重特性 参考技术B 用set吧,set可以去掉重复的,和list的存取是一样的。 参考技术C List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
List<Integer> list2 = new ArrayList<Integer>();
list2.add(2);
list2.add(3);
list2.add(4);
list2.removeAll(list1);
list2.addAll(list1);
System.out.println(list2);

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

       开发过程中遇到一个合并去重问题,任务完成后,总结出来一个比较简单的方法。对于List中不同类型的数据,需要采用不同的处理方式。List中如果是基础数据类型,直接合并去重即可;如果是对象类型,则需要借助Map去重,这里判断是否重复的标准为用户id等区分度高的属性,如果相等,就属于重复数据。
      测试用例用户实体类取《一步步搭建 Spring Boot maven 框架的工程》中的User,再添加一个业务需求细节:如果list1和list2中的数据重复,则客户姓名以list2为准。
public static void main(String[] args) {
 
        List<User> list1 = new ArrayList<>();
        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<User> list2 = new ArrayList<>();
        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<Long, User> target = new HashMap<Long, User>();
        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<User> list = new ArrayList<User>(target.values()); System.out.println("对象数据类型的list合并并且去重结果====>:" + list); } /** * 基础数据类型的list合并并且去重,业务场景比较简单 */ private static void intList() { List<Integer> list1 = new ArrayList<Integer>(); list1.add(1); list1.add(2); list1.add(3); list1.add(4); List<Integer> list2 = new ArrayList<Integer>(); list2.add(1); list2.add(4); list2.add(7); list2.add(10); List<Integer> listAll = new ArrayList<Integer>(); listAll.addAll(list1); listAll.addAll(list2); // 去重 listAll = new ArrayList<Integer>(new LinkedHashSet<>(listAll)); System.out.println("方法一:" + listAll); list1.removeAll(list2); list1.addAll(list2); System.out.println("方法二:" + list1); }

 

以上是关于java 怎么把多个list 合并成一个去掉重复的的主要内容,如果未能解决你的问题,请参考以下文章

怎么用java把多个list合并成一个?

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

Java中如何将两个字符串合并,并且把重复的元素去掉,不能用任何排序指令那些,纯手打写出来。

怎么把两个单元格合并成一个

怎么把SQL多个表关联合并成一个表

怎么把多个文档合并成压缩包