java:比较器和Treeset删除重复项
我有一个像这样的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就像一个名字。
所以我不想多次调用相同的电话号码(这是第一个删除重复的树集),我不想多次调用相同的名称(第二个树集来删除重复项)
你可以修改类,但我想知道这种方法是否可以解决真正的问题。
如果这种方法是正确的,从你的问题,我看到,如果不修改类,就不可能只使用一个比较器
谢谢
没有找到相关结果
已邀请:
5 个回复
呕蹿尉
检查field1首先给出结果
或
,具体取决于添加的顺序。 检查field2首先给出结果
或
,具体取决于添加的顺序。 这是非常奇怪的行为。这是你的意图吗?我不认为在一般情况下使用单个TreeSet和Comparator重现这一点。
届甸衬丝蚕
死搭胯
将项添加到hashset以使其唯一的通用函数,然后将它们放到TreeSet中进行排序。您可以使用它:
。 这种方法适用于固定列表。 @BalusC不,这是假设的
粱委教
}
缮记箔