java:retainAll获取俩个自定义实体对象集合的重叠数据
来源:互联网 发布:mac关机快捷键是什么 编辑:程序博客网 时间:2024/06/06 00:34
需求
有这么一个需求,学校举办了一场运动会,要求获取同时参加了田径和跳远项目的学生名单。
技术实现
为了更直观描述技术实现,先看看项目代码初始代码:
代表学生对象的实体类Student(id为唯一标识码):
public class Student{ // 学生姓名 private String name; // 学号 private String id; //省略getter setter 构造器方法}
学生数据,运动名单数据初始化:
Student s1 = new Student("小红","1"); Student s2 = new Student("小白","2"); Student s3 = new Student("小四","3"); Student s4 = new Student("小三","4"); Student s5 = new Student("老王","5"); Student s6 = new Student("老李","6"); Student s7 = new Student("欣欣","7"); Student s8 = new Student("向荣","8"); Student s9 = new Student("it民工","9"); //田径名单 List<Student> raceStudents = new ArrayList<>(); raceStudents.add(s1); raceStudents.add(s2); raceStudents.add(s3); raceStudents.add(s6); raceStudents.add(s9); //运动会名单 List<Student> jumpStudents = new ArrayList<>(); jumpStudents.add(s1); jumpStudents.add(s6); jumpStudents.add(s7); jumpStudents.add(s8); jumpStudents.add(s9);
通常,我们可以用一个中规中矩的方法来获取俩分名单的重合学生列表,先遍历田径列表,取该列表中的每一条学生对象跟运动会列表中的所有学生做比较,如果id相同,就把这个学生对象放入一个新的集合中,这样就可以获取到需求中所需要的同时参加俩项运动的学生数据(俩个列表中的重合数据)。
以上方法看似很方便的解决了问题,但是由于多层嵌套在数据量大的情况下将会严重影响执行效率。
下面介绍jdk自带的属于List的apiretainAll
,该方法可以快速的从俩个集合中获取重叠的数据。对于java内置的基础数据类型,直接调用这个方法就可以,如果是自定义数据类型(如本文中的Student
)就需要重写该实体类的equals()
,原因是retainAll
内部通过集合的contains
方法,而该方法就是用equals()
判断是否相等的(貌似jdk中判断对象是否相等都是用的这个方法)。
最后重写Student
的equals方法:
@Override public boolean equals(Object obj) { if (obj == null) { return false; } return name == null ? false : this.id.equals(((Student) obj).getId()); }
获取重叠的数据:
raceStudents.retainAll(jumpStudents);
需要注意的是,执行retainAll
的集合原始数据只会保留重叠的列表,如果还需要使用原始数据,可以拷贝一个新的列表进行取重。
阅读全文
0 0
- java:retainAll获取俩个自定义实体对象集合的重叠数据
- JAVA快速求取两个集合的交集 Vector-retainAll
- java集合中的retainAll方法解析
- 集合的addAll与retainAll方法
- 自定义实体集合的使用
- java retainAll
- Java List、Set去重实体对象类型的集合
- 实体对象的自定义排序
- 自定义的数据集合对象的自定义排序和显示
- java通过实体类名称获取对应的数据…
- JAVA 实体对象数转JSON数据碰到的问题
- handlebars获取json数据(集合对象)及各种自定义helper数据格式化工具
- Java自定义获取时间段集合
- 对于集合内装载的对象数据进行自定义排序 !
- 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable
- 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable
- 集合操作retainAll和removeAll
- java中使用反射机制获取实体类集合的某个属性值
- 1008. 数组元素循环右移问题 (20)
- -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 日志分析
- zabbix3.4 监控Dell iDrac SNMPV2
- js 拾贝集锦 (不定时更新)
- 类找不到异常
- java:retainAll获取俩个自定义实体对象集合的重叠数据
- 运维角度浅谈MySQL数据库优化
- 安装NodeJS及web服务器(运行js,不需要在浏览器执行js)
- 浅析几种Android设计模式
- ionic1 轮播图各种问题 解决方案
- Redis入门简述以及下载安装
- 1009. 说反话 (20)
- web安全扫描工具--Appscan使用
- clang-format