深入了解Java Stream中的distinct()方法:按一个或多个指定对象字段进行去重
在Java编程中,Stream API为我们提供了丰富的操作方法来处理集合数据。其中,distinct()
方法是一种常用的方法,用于去除Stream中的重复元素。然而,有时我们可能需要按照对象的一个或多个字段进行去重。本文将探讨如何利用Java Stream中的distinct()
方法按照指定对象字段进行去重,并介绍其他几种实现去重的方法。
1. Java Stream中的distinct()方法
distinct()
方法是Stream API中的一个中间操作,它返回一个去除了重复元素的新Stream。默认情况下,它使用对象的equals()
方法来判断元素是否相等。但是,如果我们需要按照对象的特定字段来进行去重,就需要结合使用distinct()
方法和自定义比较器。
1.1. 按照单个字段进行去重
假设我们有一个Person
类,其中包含id
和name
两个字段。我们想要按照id
字段对Person
对象进行去重,可以按照以下步骤操作:
List<Person> people = // 获取Person对象的集合
List<Person> uniquePeople = people.stream()
.filter(distinctByKey(Person::getId))
.collect(Collectors.toList());
// 自定义去重比较器
public static <T> Predicate<T> distinctByKey(Function<? super T, Object>