我尝试首先按汽车品牌排序,然后按汽车年份排序,然后按汽车里程排序。所有字段都是字符串。
这是我迄今为止尝试过的:
class Sorter implements Comparator<Car> {
@Override
public int compare(Car o1, Car o2) {
if(o1.getMake().compareToIgnoreCase(o2.getMake()) == 0 && Integer.parseInt(o1.getYear()) != Integer.parseInt(o2.getYear())){
if(Integer.parseInt(o1.getYear()) > Integer.parseInt(o2.getYear())){
return -1;
}else{
return 1;
}
}
if(o1.getMake().compareToIgnoreCase(o2.getMake()) == 0 && Integer.parseInt(o1.getYear()) == Integer.parseInt(o2.getYear())){
if(Integer.parseInt(o1.getMileage()) > Integer.parseInt(o2.getMileage())){
return 1;
}else{
return -1;
}
}
return o1.getMake().compareToIgnoreCase(o2.getMake());
}
}
我正在尝试构建一种类似于 Excel 中的算法,您可以按一列然后再按另一列排序。
最佳答案
一般方法称为lexicographic ordering ,这就是我们用来对单词进行排序的方法。假设我们要按字段 f1
、f2
... fn
对 C
类的两个对象进行排序,我们继续如下:
- 比较两个
f1
字段;如果不同则比较结果为最终结果,否则 - 对以下每个字段重复此操作。
在代码中(注意 - 未编译):
class Sorter implements Comparator<Car> {
@Override
public int compare(Car o1, Car o2) {
int res = o1.getMake().compareToIgnoreCase(o2.getMake());
if ( res != 0 )
return res;
res = o1.getYear().compareTo(o2.getYear());
if ( res != 0 )
return res;
return Integer.parseInt(o1.getMileage()).compareTo(Integer.parseInt(o2.getMileage()));
}
}
关于java - 对多个字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128698/