前言
Stream流已经被广泛应用于Java的开发中,本章将简单介绍Stream流的distinct()方法进行对象去重的处理。
去重原理
Stream流中的distinct()去重默认是根据Object中的equals()方法进行去重,而Object中的equals()方法实际为 == 的比较。如果需要对对象进行去重时则需要重写equals和haseCode方法。
案例展示
1.实体类进行改造
- 新增一个java实体类。本文以Author为例。实体类如下。
public class Author {
private Long id;
private String name;
}
- 实体类重写equals和haseCode方法,或者增加注解实现。两种实现方式选一即可 a.注解实现方式,注解实现方式默认会对比实体类中的所有属性是否相同(equals比较)
@EqualsAndHashCode
public class Author {
private Long id;
private String name;
}
b.重写equals和hashCode方法,使用该方式进行去重的话,可以根据某个或者某几个字段进行去重。(这里以根据id去重为例)
代码语言:javascript复制 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);
}
}