是对象去重
时间: 2023-06-21 12:24:12 浏览: 115
对于对象的去重,需要注意对象的比较方式。在Java中,可以通过重写对象的`equals()`和`hashCode()`方法来定义对象的比较方式和哈希值计算方式。
假设有一个`Person`类,它有`name`和`age`两个属性,我们需要根据`name`属性进行去重。那么可以重写`equals()`和`hashCode()`方法如下:
```java
public class Person {
private String name;
private int age;
// 省略构造函数和其他方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
```
这里的`equals()`方法用到了`Objects.equals()`方法,它会比较两个对象是否相等,而不会抛出空指针异常。`hashCode()`方法则是根据`name`属性来计算哈希值。
有了`equals()`和`hashCode()`方法后,就可以在Stream中使用`distinct()`方法进行对象去重了。例如:
```java
List<Person> list = Arrays.asList(
new Person("Tom", 20),
new Person("Jerry", 21),
new Person("Tom", 20)
);
Stream<Person> stream = list.stream();
Stream<Person> distinctStream = stream.distinct();
```
这里的`distinctStream`就是去重后的Stream对象,其中包含了两个`Person`对象:一个是`name`为"Tom",`age`为20的对象,另一个是`name`为"Jerry",`age`为21的对象。
阅读全文