我有一个像这样的java类
public class A {
private String field1;
private String field2;
// getters, setters but no equals and hashcode
}
和这个类的对象列表,我想从这个列表中删除所有具有相同field1或相同field2的重复元素,所以我有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 之类的
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)
但是我怎样才能只使用一个比较器和一个树集来做同样的事情呢?
谢谢您的帮助
更新:
感谢所有人的答案,但在阅读它们之后,我不知道这是否是解决实际问题的正确方法。
在我的真实案例中,field1 就像一个电话号码,而 field2 就像一个名字。所以我不想多次拨打同一个电话号码(这是第一个删除重复的树集),我不想多次拨打相同的名字(第二个删除重复的树集)
您可以修改课程,但我想知道这种方法是否可以解决真正的问题。
如果这种方法是正确的,从你的问题来看,我看到不修改类是不可能只使用一个比较器
谢谢