如何去掉list集合中重复元素大全
如何去掉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集合中重复元素大全相关推荐
- (去重)如何去掉list集合中重复的元素
目录 list集合中重复元素的去重 问题由来 方法一:通过两层循环来进行判断(不用重写 hashCode()和equals()方法) 方法二:利用list中contains方法去重(对象重写equal ...
- 找出集合中重复元素和不重复元素
//找出集合中重复和不重复元素List<String> list6 = new ArrayList<>();Collections.addAll(list6, "a& ...
- python列表--查找集合中重复元素的个数
方法一: >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4] >>> myset = set(mylist) >>> f ...
- python集合中的元素是否可以重复_python列表--查找集合中重复元素的个数
方法一: >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4] >>> myset = set(mylist) >>> f ...
- 【Java面试题】54 去掉一个Vector集合中重复的元素
在Java中去掉一个 Vector 集合中重复的元素 1)通过Vector.contains()方法判断是否包含该元素,如果没有包含就添加到新的集合当中,适用于数据较小的情况下. import jav ...
- python集合中的元素是否可以重复_python中集合中的元素是否可以重复
python中集合中的元素不可以重复.集合是一个无序的不重复元素序列,我们可以使用大括号{}或者set()函数来创建一个集合,具体语法为:[parame = {value01,value02,...} ...
- 如何将java集合中重复的元素取出来
今天就给大家讲一下如何将java集合中重复的元素取出来 不多废话,直接代码 此处是对集合中的数字进行查找,其他类型照样适用! List<Integer> list = new ArrayL ...
- python集合中的元素不允许重复_Python语言中同一个集合中的元素不会重复,每个元素都是唯一的。-智慧树Python数据分析与数据可视化章节答案...
Python数据分析与数据可视化:Python语言中同一个集合中的元素不会重复,每个元素都是唯一的.[?ж???] A:对 B:错 Python数据分析与数据可视化章节测试答案: 对 更多相关问题 智 ...
- android 去重 比较两个list_android 去重 比较两个list_Android 去除list集合中重复项的几种方法...
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...
最新文章
- 2017杭州·云栖大会第二天:阿里云发布了这些“黑科技”
- python2.7读写xls
- 查看dev下设备名的含义
- 关于使用ajax给全局变量赋值失败的问题
- 如何为SAP API Portal上创建的API增添API key验证保护功能
- 华为金融业务部总裁曹冲:没有进入支付市场的计划
- 安全漏洞——如何查找和修复它们
- 基于微信小程序的旅游系统源码
- Fiddler环境配置、抓包、手机代理
- WES7@IIC-China
- CSF2020大作业
- Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
- java毕业设计演唱会门票订售及管理系统Mybatis+系统+数据库+调试部署
- 计算语言学之句法理论(1)
- node中Async模块的用法
- 在虚拟机linux系统中安装与配置jdk
- 电脑蓝屏代码解释与解决方案
- 通过LiveNVS(免费使用)集中化管理多个LiveNVR-数据透传摆脱局域网的公网IP限制
- CSS 样式实现单边阴影
- 用Python让你完成一次绝美樱花视觉体验瞬间陷入二次元~
热门文章
- GODOT游戏编程006---- Your First Game
- 【招商银行2021校招】提前批笔试题【C++方向】
- 如何从小白变成优秀文案?这几个APP来帮你
- Android 13 适配指南
- 《杰夫 · 贝佐斯(Jeff Bezos)历年致股东信》读后感
- 用CSS样式下载器 下载CSS里面的图片路径配对问题
- Ubuntu ssh的安装及使用,测试联通
- Vue组件中name的三大作用
- spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)
- 目录浏览(目录遍历)漏洞和任意文件读取/下载漏洞