我有一个对象列表。该对象看起来类似于这个:
class Data {
...
private X somethig;
private Y somethigElse;
public boolean customEquals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Data)) {
return false;
}
Data other = (Data) obj;
if (something == null) {
if (other.something != null) {
return false;
}
} else if (!something.equals(other.something)) {
return false;
}
if (somethigElse == null) {
if (other.somethigElse != null) {
return false;
}
} else if (!somethigElse.equals(other.somethigElse)) {
return false;
}
return true;
}
public boolean equals(Object obj) {
...
}
public int hashCode() {
...
}
getters/setters
}
我需要过滤列表以从中获取不同的对象。
请注意,实现了 equals 和 hashCode 方法(它们使用另一个字段),我不能在此任务中使用 equals。所以相等性不是由 equals 定义的,而是由 'something' 和 'somethigElse' 属性定义的。我怎样才能做到这一点?
我努力了:
final Comparator<Data> comparator = new Comparator<Data>() {
@Override
public int compare(Data o1, Data o2) {
return o1.customEquals(o2) ? 0 : 1;
}
};
Set<Data> set = new TreeSet<Data>(comparator);
set.addAll(list);
System.out.println(set);
但是该集合仍然多次包含一些对象。