1. 双层for循环去重(不仅仅适用于去重,它可以找到两个相等的元素做操作)
//根据EndTime,BeginTime,BatchFlag三个信息进行对象去重保留一条
for (int i1 = 0; i1 < tempTaskList.size()-1; i1++) {
for (int j1 = tempTaskList.size()-1; j1 >i1; j1--) {
if ((tempTaskList.get(j1).getEndTime().equals(tempTaskList.get(i1).getEndTime()))
&& (tempTaskList.get(j1).getBeginTime().equals(tempTaskList.get(i1).getBeginTime()))
&& tempTaskList.get(j1).getBatchFlag()) {
tempTaskList.remove(j1);
}
}
}
2.重写hashCode和equals方法(有局限性,但效率比第一个高)
通过重写对应属性的hashCode和equals方法,再用一个新集合用于接受去重后的结果
3.用stream流去重(我对stream流不是很熟悉,所以就没用过)
java8去重(根据年级和专业,当年级和专业都相同的情况下看做是重复数据)
List<ClassEntity> distinctClass = classEntities.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(
Comparator.comparing(
o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));
-----------------------------------
摘自:https://blog.51cto.com/u_3664660/3213545