开发过程中遇到一个合并去重问题,任务完成后,总结出来一个比较简单的方法。对于List中不同类型的数据,需要采用不同的处理方式。List中如果是基础数据类型,直接合并去重即可;如果是对象类型,则需要借助Map去重,这里判断是否重复的标准为用户id等区分度高的属性,如果相等,就属于重复数据。
      测试用例用户实体类取《一步步搭建 Spring Boot maven 框架的工程》中的User,再添加一个业务需求细节:如果list1和list2中的数据重复,则客户姓名以list2为准。
  1. public static void main(String[] args) {
  2.  
  3. List<User> list1 = new ArrayList<>();
  4. User user01 = new User();
  5. user01.setId(1L);
  6. user01.setName("Bell");
  7. list1.add(user01);
  8. User user02 = new User();
  9. user02.setId(2L);
  10. user02.setName("Jack");
  11. list1.add(user02);
  12.  
  13. List<User> list2 = new ArrayList<>();
  14. User user03 = new User();
  15. user03.setId(2L);
  16. user03.setName("Tom");
  17. list2.add(user03);
  18. User user04 = new User();
  19. user04.setId(3L);
  20. user04.setName("Tao");
  21. list2.add(user04);
  22.  
  23. Map<Long, User> target = new HashMap<Long, User>();
  24. if (CollectionUtils.isNotEmpty(list1) && CollectionUtils.isNotEmpty(list2)) {
    //把list1放入Map target中,key取用户id
  25. for (User tempUser : list1) {
  26. target.put(tempUser.getId(), tempUser);
  27. }
  28. for (User user2 : list2) {
  29. Long userId = user2.getId();
  30. if (target.containsKey(userId)) {
  31. User temp = target.get(userId);
  32. // 用户id重复,以list2中的用户姓名为准
  33. temp.setName(user2.getName());
  34. target.put(userId, temp);
  35. } else {
  36. target.put(userId, user2);
  37. }
  38. }
  39. }
  40. List<User> list = new ArrayList<User>(target.values());
  41.  
  42. System.out.println("对象数据类型的list合并并且去重结果====>:" + list);
  43. }
  44. /**
  45. * 基础数据类型的list合并并且去重,业务场景比较简单
  46. */
  47. private static void intList() {
  48. List<Integer> list1 = new ArrayList<Integer>();
  49. list1.add(1);
  50. list1.add(2);
  51. list1.add(3);
  52. list1.add(4);
  53. List<Integer> list2 = new ArrayList<Integer>();
  54. list2.add(1);
  55. list2.add(4);
  56. list2.add(7);
  57. list2.add(10);
  58. List<Integer> listAll = new ArrayList<Integer>();
  59. listAll.addAll(list1);
  60. listAll.addAll(list2);
  61. // 去重
  62. listAll = new ArrayList<Integer>(new LinkedHashSet<>(listAll));
  63. System.out.println("方法一:" + listAll);
  64. list1.removeAll(list2);
  65. list1.addAll(list2);
  66. System.out.println("方法二:" + list1);
  67. }

Java把多个list 合并成一个并去重的更多相关文章

  1. java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重

    package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...

  2. go语言:多个[]byte数组合并成一个[]byte

    场景:在开发中,要将多个[]byte数组合并成一个[]byte,初步实现思路如下: 1.获取多个[]byte长度 2.构造一个二维码数组 3.循环将[]byte拷贝到二维数组中 package gst ...

  3. MySQL把多个字段合并成一条记录的方法

    转:http://www.111cn.net/database/mysql/71591.htm MySQL把多个字段合并成一条记录的方法 在mysql中字段合并可以使用很多函数来实现,如可以利用 GR ...

  4. wpf dll和exe合并成一个新的exe

    原文:wpf dll和exe合并成一个新的exe 微软有一个工具叫ILMerge可以合并dll exe等,但是对于wpf的应用程序而言这个工具就不好用了.我的这方法也是从国外一个博客上找来的.仅供大家 ...

  5. 将两个列不同的DataTable合并成一个新的DataTable

    /// <summary>         /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable         /// </summary> ...

  6. HTML5利用canvas,把多张图合并成一张图片

    需求分析,根据当前网页中的几张图片,在手机上长按,保存图片到相册或者发送给好友. drawCanvas(){ var self = this; var imgsrcArray = [ require( ...

  7. python将两个数组合并成一个数组的两种方法的代码

    内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...

  8. 使用 Java 将多个文件压缩成一个压缩文件

    使用 Java 将多个文件压缩成一个压缩文件 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZipMultiFile.java pac ...

  9. SQL SERVER 如何把1列多行数据 合并成一列显示

    示例 修改前:1列多行数据 修改后:合并成一列 示例语句 1 2 3 4 5 6 7 8 9 10 11 select 类别,     名称 = (         stuff(            ...

随机推荐

  1. C++ 去掉字符串的首尾空格和全部空格

    #include <iostream>#include <string>using namespace std; //去掉收尾空格string& ClearHeadTa ...

  2. SQL Server2008 删除重复记录只剩一条(无Uid)

    INSERT INTO 表1   SELECT  *  FROM  视图1 CREATE TABLE  ##TMP01                                    ---创建 ...

  3. AdventureWorks 安装和配置[转自 微软msdn]

    AdventureWorks 安装和配置 2018/06/19 适用对象:SQL ServerAzure SQL 数据库Azure SQL 数据仓库并行数据仓库 AdventureWorks 下载链接 ...

  4. Python3标准库使用样例

    原:https://doughellmann.com/blog/the-python-3-standard-library-by-example/the-python-3-standard-libra ...

  5. 学习笔记之Google

    Google Pro Tip: Use Back-of-the-envelope-calculations to Choose the Best Design - High Scalability - ...

  6. QGroupBox

    QGroupBox窗口部件提供了一个有标题的组合框 组合框提供一个框架.一个标题和一个键盘快捷键,并且显示在它里面地其它不同窗口部件.标题在上面,键盘快捷键移动键盘焦点到组合框的一个子窗口部件,并且子 ...

  7. echart——vue封装成公共组件

    <!-- 自定义Echarts * options: Object,//数据 * theme: String,//主题 * initOptions: Object,//初始化 * group: ...

  8. C# - 常见问题整理

    关于循环和try{}..catch{}的嵌套使用 foreach(var item in items) { try { try{ } catch(Exception ex) { throw; // 将 ...

  9. Dumpsys Alarm查看应用程序唤醒命令

    Dumpsys alarm查看应用程序唤醒命令: 在安卓adb root进如命令行后(没有root或者root群组的权限执行不了该命令), 1. <span style="font-s ...

  10. Linux命令——source

    参考:What does 'source' do? 前言 当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profil ...