Stream流已经被广泛应用于Java的开发中,本章将简单介绍Stream流的distinct()方法进行对象去重的处理。
Stream流中的distinct()去重默认是根据Object中的equals()方法进行去重,而Object中的equals()方法实际为 == 的比较。如果需要对对象进行去重时则需要重写equals和haseCode方法。
1.实体类进行改造
public class Author {
private Long id;
private String name;
}
@EqualsAndHashCode
public class Author {
private Long id;
private String name;
}
b.重写equals和hashCode方法,使用该方式进行去重的话,可以根据某个或者某几个字段进行去重。(这里以根据id去重为例)
public class Author {
private Long id;
private String name;
@Override
public boolean equals(Object o){
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
Author author = (Author) o;
return Objects.equals(id,author.id);
}
@Override
public int hashCode(){
return Objects.hash(id);
}
}