对象怎么重写equals和hashcode方法 然后用.distinct()去重
时间: 2024-05-14 09:14:17 浏览: 17
在 Java 中,equals 和 hashCode 方法用于比较对象的值和哈希码。如果两个对象的值相等,它们应该具有相同的哈希码。因此,如果你要使用 .distinct() 方法去重,你需要重写这两个方法。
重写 equals 方法:
1. 比较两个对象的引用是否相等,如果相等,则返回 true。
2. 检查对象是否为 null 或者类型是否不同,如果是,则返回 false。
3. 将对象转换为需要比较的类型,并比较它们的每个字段是否相同,如果所有字段都相同,则返回 true,否则返回 false。
示例代码:
```
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return Objects.equals(field1, myClass.field1) && Objects.equals(field2, myClass.field2);
}
```
重写 hashCode 方法:
1. 声明一个 int 类型的变量 result,并将其初始化为一个非零奇数。
2. 将对象的每个字段的哈希码与 result 进行异或操作。
3. 返回 result。
示例代码:
```
@Override
public int hashCode() {
int result = 17;
result = 31 * result + Objects.hashCode(field1);
result = 31 * result + Objects.hashCode(field2);
return result;
}
```
重写完这两个方法后,就可以使用 .distinct() 方法去重了。例如:
```
List<MyClass> list = new ArrayList<>();
list.add(new MyClass("a", 1));
list.add(new MyClass("b", 2));
list.add(new MyClass("a", 1));
list.add(new MyClass("c", 3));
List<MyClass> distinctList = list.stream().distinct().collect(Collectors.toList());
```
在这个例子中,我们创建了一个包含四个 MyClass 对象的列表。由于前两个对象的值相同,我们使用 .distinct() 方法去重后,只剩下三个对象。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)