java stream api 使用 distinct() 方法实现去重操作,该方法基于元素的 equals() 和 hashcode() 方法来判断重复性。调用 stream().distinct() 会返回一个包含原流中不重复元素的新流,且保持首次出现的顺序。

如何对自定义对象列表进行去重
对自定义对象列表去重时,必须确保类正确重写了 equals() 和 hashCode() 方法,否则 distinct() 无法识别逻辑上相同的对象。以下代码演示了定义 User 类并对其进行去重的完整过程。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter methods omitted for brevity
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && name.equals(user.name);
}
@Override
public int hashCode() {
return 31 * name.hashCode() + age;
}
@Override
public String toString() {
return "User{name='" + name + "\', age=" + age + "}";
}
public static void main(String[] args) {
List<user> users = Arrays.asList(
new User("Alice", 30),
new User("Bob", 25),
new User("Alice", 30), // Duplicate
new User("Charlie", 35)
);
List<user> distinctUsers = users.stream()
.distinct()
.collect(Collectors.toList());
distinctUsers.forEach(System.out::println);
}
}</user></user>
运行上述代码将输出三个唯一的 User 对象,其中第二个
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











