JAVA Stream 根据对象属性去重
引言
在实际开发中,我们经常遇到需要对一个对象集合进行去重操作的需求。在JAVA中,我们可以使用Stream API来高效地进行对象去重操作。本文将介绍如何使用JAVA Stream来根据对象属性进行去重,并提供相应的代码示例。
什么是Stream
Stream是JAVA 8引入的一个新的API,它提供了一种函数式的编程方式来操作集合数据。Stream API提供了一系列用于对集合进行处理的方法,例如过滤、映射、排序、去重等。相比传统的集合处理方式,Stream API可以更加简洁、高效地完成相同的操作。
如何根据对象属性去重
假设我们有一个包含Person对象的List集合,每个Person对象都拥有一个唯一的id属性。我们需要根据id属性对Person对象进行去重。下面是一个使用Stream进行去重的示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "Alice"));
personList.add(new Person(2, "Bob"));
personList.add(new Person(3, "Alice"));
List<Person> distinctPersonList = personList.stream()
.distinct()
.collect(Collectors.toList());
distinctPersonList.forEach(System.out::println);
}
}
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return id == person.id;
}
@Override
public int hashCode() {
return id;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
在上述代码中,我们首先创建了一个包含Person对象的List集合。然后,我们使用Stream API的distinct()
方法对该集合进行去重操作。最后,我们将去重后的结果收集到一个新的List集合中,并使用forEach()
方法打印出每个去重后的Person对象。
为什么使用equals()和hashCode()方法
在上述代码中,我们重写了Person类的equals()
和hashCode()
方法。这是因为Stream API在进行去重操作时,会调用对象的equals()
和hashCode()
方法来判断两个对象是否相等。由于我们需要根据id属性进行去重,所以我们只需要重写equals()
和hashCode()
方法来比较和计算id即可。
类图
下面是Person类的类图,使用mermaid语法表示:
classDiagram
class Person {
- int id
- String name
+ Person(int id, String name)
+ int getId()
+ String getName()
+ boolean equals(Object obj)
+ int hashCode()
+ String toString()
}
总结
使用JAVA Stream可以高效地对对象集合进行去重操作。我们只需要重写对象的equals()
和hashCode()
方法,然后使用Stream API的distinct()
方法即可实现根据对象属性去重。通过这种方式,我们可以简化代码,提高效率,并且使代码更具可读性。
希望本文对你理解JAVA Stream根据对象属性去重有所帮助!如果你对JAVA Stream还有更多的疑问或者想要了解更多的用法,可以查阅相关文档或者进行进一步的学习和实践。