私はこのようなJavaクラスを持っています
public class A {
private String field1;
private String field2;
// getters, setters but no equals and hashcode
}
およびこのクラスのオブジェクトのリスト、同じフィールド1または同じフィールド2を持つすべての重複要素をこのリストから削除したいので、2つのコンパレーターがあります
public class Comparator1 implements Comparator<A> {
public int compare(A o1, A o2) {
return o1.getField1().compareToIgnoreCase( o2.getField1() );
}
}
public class Comparator2 implements Comparator<A> {
public int compare(A o1, A o2) {
return o1.getField2().compareToIgnoreCase(o2.getField2());
}
}
タスクを実行するには、ツリーセットを次のように使用します
TreeSet<A> ts1 = new TreeSet<A>(new Comparator1())
ts1.addAll(list)
TreeSet<A> ts2 = new TreeSet<A>(new Comparator2())
ts2.addAll(ts1)
list.clear()
list.addAll(ts2)
しかし、1つのコンパレータと1つのツリーセットだけを使用して同じことを行うにはどうすればよいですか?
助けてくれてありがとう
アップデート:
回答ありがとうございますが、それらを読んだ後、これが実際の問題に対する正しいアプローチであるかどうかわかりません。
私の実際のケースでは、field1 は電話番号のようなもので、field2 は名前のようなものです。したがって、同じ電話番号に複数回電話をかけたくありません (これは重複を削除する最初のツリーセットです)。同じ名前で複数回電話をかけたくありません (重複を削除する 2 番目のツリーセット)。
クラスを変更できますが、このアプローチで実際の問題を解決できるかどうかを知りたいです。
このアプローチが正しい場合、あなたの質問から、クラスを変更せずにコンパレータを1つだけ使用することはできないことがわかります
ありがとう