java - POJO类型的Java集无法添加元素
问题描述
我有一个数据对象类:
public class MyDataObject {
private String value;
private String text;
private Set<MyDataObject> child;
// Getter & setters
// Constructor
public MyDataObject(final String value, final String text) {
this.value = value;
this.text = text;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyDataObject that = (MyDataObject) o;
return value.equals(that.value) &&
text.equals(that.text) &&
Objects.equals(child, that.child);
}
@Override
public int hashCode() {
return Objects.hash(value, text, child);
}
}
我在我的一个MyDataObject
对象中添加了 2 个子元素。
说:
MyDataObject myDataObject = new MyDataObject("USA", "United States");
Set<MyDataObject> childSet = new TreeSet<>(Comparator.comparing(MyDataObject::getText));
childSet.add(new MyDataObject("NY", "Bronx")); // This is added
childSet.add(new MyDataObject("NY", "Manhattan")); // This is not being added, returing false.
myDataObject.setChild(childSet);
我也重写了hashcode
和equals
方法来考虑子元素。
我错过了什么?
解决方案
你Comparator
的与 equals 不一致。
那就是:您已经Comparator
为您的Set
that在您的方法返回0
的情况下返回。equals(Object)
false
推荐阅读
- c# - SignalR 核心集线器连接 lambda 动作
- reactjs - npm 错误!找不到模块“鹰”
- r - tidyr:每个键收集两个值
- python - 如何将格式化为 unicode 的字符串转换为 unicode?
- python - 如何将未知的 Bigint 日期时间格式转换为日期时间
- java - 数组列表 Java
- python - 检测用户正在查看哪个立方体?
- angular - Angular Universal RxJs“Observable_1.Observable.throw 不是函数”
- mysql - 并非所有字符集和排序规则集都更改为 utf8mb4(.unicode.ci)
- javascript - Webpack 包应该使用什么脚本类型?