【Java基础】Stream流操作对象去重

2024-05-26 08:35:11 浏览数 (2)

前言

Stream流已经被广泛应用于Java的开发中,本章将简单介绍Stream流的distinct()方法进行对象去重的处理。

去重原理

Stream流中的distinct()去重默认是根据Object中的equals()方法进行去重,而Object中的equals()方法实际为 == 的比较。如果需要对对象进行去重时则需要重写equals和haseCode方法。

案例展示

1.实体类进行改造

  • 新增一个java实体类。本文以Author为例。实体类如下。
代码语言:javascript复制
 public class Author {

  private Long id;

  private String name;
 }
  • 实体类重写equals和haseCode方法,或者增加注解实现。两种实现方式选一即可 a.注解实现方式,注解实现方式默认会对比实体类中的所有属性是否相同(equals比较)
代码语言:javascript复制
@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);
 } 
}

结束!

0 人点赞