数据去重复的几种方式
- Set集合的天性
场景一:
public void show(){
List<STudent>list=new ArrayList<>();
......
Set<STudent> set=new TreeSet<>(list);
list.clear();
list=new ArrayList(set);
}
场景二:
public void show(){
List<STudent>list=new ArrayList<>();
List<Student>newList=new ArrayList<>();
......
Set<STudent> set=new HashSet<>();
...遍历....
if(set.add(stu)){
newList.add(stu);
}
}
....持久层操作...
}
- 对象重写HashCode和Equals
实体:
package com.skylon.fddp.data.eums;
import lombok.Data;
import java.util.Objects;
@Data
public class Student {
private String name;
private Integer age;
private Double hight;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name) && Objects.equals(age, student.age) && Objects.equals(hight, student.hight);
}
@Override
public int hashCode() {
return Objects.hash(name, age, hight);
}
}
案例:
@Test
public void sss() {
Student stu = new Student();
stu.setName("张三");
stu.setAge(11);
stu.setHight(56.6);
Student stu1 = new Student();
stu1.setName("李四");
stu1.setAge(11);
stu1.setHight(56.6);
System.out.println(stu.hashCode()+":"+stu1.hashCode());
List<Student>list=new ArrayList<>();
....fori.....
if(stu1.hashCode()!=stu.hashCode()){
list.add();
}
}
- 按照成员属性(比较常用一些)
考勤案例:
成员属性有:
姓名:
年龄
性别
上班时间
....流分组之后生成List集合....
List<STudent>newList=new ArrayList<>();
Map<String,List<Student>> map=.....;
//排序
if(list.size()>=2){
newList.add(list.get(0));
}else{
newList.addAll(list)
}
- 按照时间戳去重(正在抓紧敢)
因为时间戳重复率比较低
考勤案例:
成员属性有:
姓名:
年龄
性别
上班时间
....流分组之后生成List集合....
List<STudent>newList=new ArrayList<>();
Map<String,List<Student>> map=.....;
//排序
if(list.size()>=2){
newList.add(list.get(0));
}else{
newList.addAll(list)
}
THE END
暂无评论内容