オブジェクトのリストがあります。オブジェクトは次のようになります。
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);
しかし、セットにはまだいくつかのオブジェクトが数回含まれています。