1

オブジェクトのリストがあります。オブジェクトは次のようになります。

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);

しかし、セットにはまだいくつかのオブジェクトが数回含まれています。

4

2 に答える 2