如何去掉list集合中重复元素大全

  • 创建实体对象
    • 模拟集合
    • 方法一:遍历实体类的每一个属性
    • 方法二:利用list中contains方法去重
    • 方法三:java 8中流式去重操作
    • 方法四:HashSet去重

问题由来,在平常开发中我们经常用到导入功能,将模板中的数据封装成对象装到集合中,一个集合容器里面有很多重复的对象,里面的对象没有主键,但是根据业务的需求,重复的数据是不能导入并且及时给予提示!

创建实体对象

public class Student {private String stuId;private String stuName;private String sex;public Student(String stuId, String stuName, String sex) {this.stuId = stuId;this.stuName = stuName;this.sex = sex;}public String getStuId() {return stuId;}public void setStuId(String stuId) {this.stuId = stuId;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Student{" +"stuId='" + stuId + '\'' +", stuName='" + stuName + '\'' +", sex='" + sex + '\'' +'}';}
}

模拟集合

 List<Student> stuList = new ArrayList<Student>();stuList.add(new Student("S001", "张三", "女"));stuList.add(new Student("S002", "李四", "男"));stuList.add(new Student("S001", "张三", "女"));stuList.add(new Student("S002", "李四", "男"));stuList.add(new Student("S003", "王五", "男"));stuList.add(new Student("S004", "赵六", "女"));

方法一:遍历实体类的每一个属性

遍历实体类的每一个属性并判断是否重复。

测试方法:

/*** 方法一:遍历实体类的每一个属性,*/List<Student> newStus = new ArrayList<Student>();for (Student stu : stuList) {if(ObjectUtils.isEmpty(stuList)){newStus.add(stu);}boolean isSame = false;for (Student s : newStus) {if(s.getStuId().equals(stu.getStuId()) && s.getStuName().equals(stu.getStuName()) && s.getSex().equals(stu.getSex())){isSame = true;break;}}if(isSame == false){newStus.add(stu);}}// 输出结果System.out.println(newStus);}

结果:

[Student{stuId='S001', stuName='张三', sex='女'}, Student{stuId='S002', stuName='李四', sex='男'}, Student{stuId='S003', stuName='王五', sex='男'}, Student{stuId='S004', stuName='赵六', sex='女'}]

方法二:利用list中contains方法去重

利用list中contains方法去重,在使用contains()之前,必须要重写equals()方法!

Student重写equals():

@Override
public boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;Student student = (Student) obj;//当stuId、stuName、sex内容都相等的时候,才返回truereturn Objects.equals(stuId, student.stuId) &&Objects.equals(stuName, student.stuName) &&Objects.equals(sex, student.sex);
}

测试方法:

/*** 方法二:利用list中contains方法去重*/
List<Student> newList = new ArrayList<Student>();//使用contain判断,是否有相同的元素for (Student s : stuList) {if(!newList.contains(s)){newList.add(s);}}//输出结果System.out.println(newList);

结果:

[Student{stuId='S001', stuName='张三', sex='女'}, Student{stuId='S002', stuName='李四', sex='男'}, Student{stuId='S003', stuName='王五', sex='男'}, Student{stuId='S004', stuName='赵六', sex='女'}]

方法三:java 8中流式去重操作

利用 jdk1.8 中提供的Stream.distinct()列表去重,Stream.distinct()使用hashCode()和equals()方法来获取不同的元素,因此使用这种写法,对象需要重写hashCode()和equals()方法!

Student类重写hashCode()

@Overridepublic int hashCode() {return Objects.hash(stuId, stuName, sex);}

测试方法:

/*** 方法三:java 8中流式去重操作*/
List<Student> newList = stuList.stream().distinct().collect(Collectors.toList());
//输出结果
System.out.println(newList.toString());

结果:

[Student{stuId='S001', stuName='张三', sex='女'}, Student{stuId='S002', stuName='李四', sex='男'}, Student{stuId='S003', stuName='王五', sex='男'}, Student{stuId='S004', stuName='赵六', sex='女'}]

方法四:HashSet去重

利用set集合的天然不支持重复元素特性,用set集合判重必须重写Object中的equals()和hashCode(),重写Object中的equals()和hashCode()同方法二和方法三种一致!

测试方法:

/*** 方法四:HashSet去重*/
List<Student> newList = new ArrayList<Student>();
//set去重
HashSet<Student> set = new HashSet<>(stuList);
newList.addAll(set);
System.out.println(newList.toString());

结果:

[Student{stuId='S004', stuName='赵六', sex='女'}, Student{stuId='S002', stuName='李四', sex='男'}, Student{stuId='S003', stuName='王五', sex='男'}, Student{stuId='S001', stuName='张三', sex='女'}]

总结:四种方法去重效果一致,前三种方法输出的顺序保持一致(有序),第四种用HashSet去重打印的结果是无序的,因为set集合存放的数据本身就是无序且不可重复的!

如何去掉list集合中重复元素大全相关推荐

  1. (去重)如何去掉list集合中重复的元素

    目录 list集合中重复元素的去重 问题由来 方法一:通过两层循环来进行判断(不用重写 hashCode()和equals()方法) 方法二:利用list中contains方法去重(对象重写equal ...

  2. 找出集合中重复元素和不重复元素

    //找出集合中重复和不重复元素List<String> list6 = new ArrayList<>();Collections.addAll(list6, "a& ...

  3. python列表--查找集合中重复元素的个数

    方法一: >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4] >>> myset = set(mylist) >>> f ...

  4. python集合中的元素是否可以重复_python列表--查找集合中重复元素的个数

    方法一: >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4] >>> myset = set(mylist) >>> f ...

  5. 【Java面试题】54 去掉一个Vector集合中重复的元素

    在Java中去掉一个 Vector 集合中重复的元素 1)通过Vector.contains()方法判断是否包含该元素,如果没有包含就添加到新的集合当中,适用于数据较小的情况下. import jav ...

  6. python集合中的元素是否可以重复_python中集合中的元素是否可以重复

    python中集合中的元素不可以重复.集合是一个无序的不重复元素序列,我们可以使用大括号{}或者set()函数来创建一个集合,具体语法为:[parame = {value01,value02,...} ...

  7. 如何将java集合中重复的元素取出来

    今天就给大家讲一下如何将java集合中重复的元素取出来 不多废话,直接代码 此处是对集合中的数字进行查找,其他类型照样适用! List<Integer> list = new ArrayL ...

  8. python集合中的元素不允许重复_Python语言中同一个集合中的元素不会重复,每个元素都是唯一的。-智慧树Python数据分析与数据可视化章节答案...

    Python数据分析与数据可视化:Python语言中同一个集合中的元素不会重复,每个元素都是唯一的.[?ж???] A:对 B:错 Python数据分析与数据可视化章节测试答案: 对 更多相关问题 智 ...

  9. android 去重 比较两个list_android 去重 比较两个list_Android 去除list集合中重复项的几种方法...

    因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...

最新文章

  1. 2017杭州·云栖大会第二天:阿里云发布了这些“黑科技”
  2. python2.7读写xls
  3. 查看dev下设备名的含义
  4. 关于使用ajax给全局变量赋值失败的问题
  5. 如何为SAP API Portal上创建的API增添API key验证保护功能
  6. 华为金融业务部总裁曹冲:没有进入支付市场的计划
  7. 安全漏洞——如何查找和修复它们
  8. 基于微信小程序的旅游系统源码
  9. Fiddler环境配置、抓包、手机代理
  10. WES7@IIC-China
  11. CSF2020大作业
  12. Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
  13. java毕业设计演唱会门票订售及管理系统Mybatis+系统+数据库+调试部署
  14. 计算语言学之句法理论(1)
  15. node中Async模块的用法
  16. 在虚拟机linux系统中安装与配置jdk
  17. 电脑蓝屏代码解释与解决方案
  18. 通过LiveNVS(免费使用)集中化管理多个LiveNVR-数据透传摆脱局域网的公网IP限制
  19. CSS 样式实现单边阴影
  20. 用Python让你完成一次绝美樱花视觉体验瞬间陷入二次元~

热门文章

  1. GODOT游戏编程006---- Your First Game
  2. 【招商银行2021校招】提前批笔试题【C++方向】
  3. 如何从小白变成优秀文案?这几个APP来帮你
  4. Android 13 适配指南
  5. 《杰夫 · 贝佐斯(Jeff Bezos)历年致股东信》读后感
  6. 用CSS样式下载器 下载CSS里面的图片路径配对问题
  7. Ubuntu ssh的安装及使用,测试联通
  8. Vue组件中name的三大作用
  9. spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)
  10. 目录浏览(目录遍历)漏洞和任意文件读取/下载漏洞