我有一个ArrayList
,我试图根据两个条件进行排序。首先是距离,然后是类型。 d_distance
是一个双精度,对每个对象都是唯一的。没有两个d_distance
可以是平等的。 type
是1-6
的整数,两个对象可以是同一类型。这是我的实施:
Collections.sort(list, new Comparator<Abc>() {
@Override
public int compare(Abc lhs, Abc rhs) {
if (lhs.d_distance > rhs.d_distance)
return 1;
if (lhs.d_distance < rhs.d_distance){
if (lhs.type > rhs.type)
return 1;
if (lhs.type < rhs.type)
return -1;
return -1
}
return 0;
}
});
答案 0 :(得分:1)
最简单的实施。
@Override
public int compare(Abc lhs, Abc rhs) {
if (lhs.d_distance != rhs.d_distance)
return lhs.d_distance < rhs.d_distance ? -1 : 1;
return lhs.type - rhs.type;
}
但是既然你说距离永远不会相等,那么按类型排序作为次要排序是没有意义的。因此:
@Override
public int compare(Abc lhs, Abc rhs) {
return Double.compare(lhs.d_distance, rhs.d_distance);
}
答案 1 :(得分:0)
使用JDK实用程序方法Double.compare()
和Integer.compare()
来帮助比较:
Collections.sort(list, new Comparator<Abc>() {
@Override
public int compare(Abc lhs, Abc rhs) {
int c = Double.compare(lhs.d_distance, rhs.d_distance);
return c == 0 ? Integer.compare(lhs.type, rhs.type) : c;
}
});
但是如果距离确实是唯一的,那么编码它们就没有价值,所以:
Collections.sort(list, new Comparator<Abc>() {
@Override
public int compare(Abc lhs, Abc rhs) {
return Double.compare(lhs.d_distance, rhs.d_distance);
}
});