HashSet
使用hashSet 根据某对象去重,首先对象要重写equals 和 hashcode方法,例如
public class Student { private String id; private String name; private String address; // 以id去重 @Override public int hashCode() { return id.hashCode(); } @Override public boolean equals(Object o) { Student s = (Student) o; return id.equals(s.getId()); } // getter setter }
HashSet<Student> student = new HashSet<>();
TreeSet
TreeSet 实现根据某对象的字段去重就比较简单了,TreeSet 构造方法带有比较器,例如
TreeSet<Student> students = new TreeSet<>(Comparator.comparing(Student::getId));
Stream
jdk8 的新特性,用stream去重就比较美观了,如
ArrayList<Student> result = students.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Student::getId))), ArrayList::new));