我有一个CustomObject的ArrayList,我的对象只是由两个值x和y
组成MyObject = (double)x && (double)y
我想做的是:
我尝试使用Collections.sort
对我的数组进行重新排序,并使用一个集来删除重复但没有任何效果。
Collections.sort(listPoints, new Comparator<MyObject>(){
@Override
public int compare(MyObject lhs, MyObject rhs) {
return Double.compare(lhs.y, rhs.y);
}
});
Collections.sort(listPoints, new Comparator< MyObject >(){
@Override
public int compare(MyObject lhs, MyObject rhs) {
return Double.compare(lhs.x, rhs.x);
}
});
答案 0 :(得分:2)
使用不同的比较器对列表进行两次排序将不起作用。您需要在同一比较器中比较x和y。
public int compare(MyObject lhs, MyObject rhs) {
int result = Double.compare(lhs.y, rhs.y);
if (result != 0) return result;
return Double.compare(lhs.x, rhs.x);
}
如果MyObject正确实现了equals()和hashCode()方法,则使用set删除重复项将起作用。
答案 1 :(得分:0)
要获取自定义类的唯一元素,您只需将所有元素添加到HashSet
之类的内容即可。要使用此功能,您需要覆盖Object#hashCode()
方法,以便返回hashCode()
x
y
实例的MyObject
值Object#equals()
。不要忘记覆盖hashCode()
。
有关覆盖equals()
和{{1}}的更多信息,请参阅here。
答案 2 :(得分:0)
您可以在MyObject类中实现Comparable<MyObject>
,然后使用TreeSet<MyObject>
,因为您已经对唯一值进行了排序。
答案 3 :(得分:0)
要删除重复项并保留排序顺序,我建议如下: