去除List中的重複物件
阿新 • • 發佈:2018-12-13
常用的型別直接把list的值賦值給HashSet就能實現去重,但是當list用來存放物件的時候由於每個物件的存放地址都不同,就算物件的值一模一樣,HashSet也會認為他們是不一樣的物件,所以直接使用之前那種方法去重會失敗。這時要實現去重,重寫需要去重物件的hashcode,和equals方法即可。
Entity
public class Student { private String name; private String sex; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } //equals重寫 @Override public boolean equals(Object obj) { Student student=(Student)obj; return student.getAge().equals(age)&&student.getName().equals(name)&&student.getSex().equals(sex); } //hashCode重寫 @Override public int hashCode() { String in=name+sex+age; return in.hashCode(); } @Override public String toString() { return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]"; } public Student(String name, String sex, Integer age) { this.name = name; this.sex = sex; this.age = age; } }
Test
public static void main(String[] args) { List<Student> students=new ArrayList<>(); students.add(new Student("張飛","男",21)); students.add(new Student("趙雲","女",21)); students.add(new Student("于謙","男",21)); students.add(new Student("張飛","男",21)); Set<Student> ts = new HashSet<Student>(students); students.clear(); students.addAll(ts); students.forEach(student->{ System.out.println(student.toString()); }); }
輸出結果
Student [name=張飛, sex=男, age=21]
Student [name=于謙, sex=男, age=21]
Student [name=趙雲, sex=女, age=21]