首页 > 解决方案 > 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);

我也重写了hashcodeequals方法来考虑子元素。

我错过了什么?

标签: javacollectionsset

解决方案


Comparator与 equals 不一致

那就是:您已经Comparator为您的Setthat在您的方法返回0的情况下返回。equals(Object)false


推荐阅读