java - 对多个字段进行排序

标签 java sorting arraylist

我尝试首先按汽车品牌排序,然后按汽车年份排序,然后按汽车里程排序。所有字段都是字符串。

这是我迄今为止尝试过的:

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 ,这就是我们用来对单词进行排序的方法。假设我们要按字段 f1f2 ... fnC 类的两个对象进行排序,我们继续如下:

  1. 比较两个 f1 字段;如果不同则比较结果为最终结果,否则
  2. 对以下每个字段重复此操作。

在代码中(注意 - 未编译):

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/

相关文章:

java - 如何使用 BufferedWriter 将二维数组保存到文本文件中?

java - 在textview Android中显示秒数倒计时

java - 无法构建 android 项目,因为 ActionBarActivity 无法解析为类型

java - 对于此代码,使用 Java 在 SPOJ 中获取 NZEC 错误

c++ - 得到第n大数

jquery - 我可以在此 jQuery 插件中更改什么以包括对隐藏的表行进行排序

java - 通过 ObjectInputStream 保存和加载类的 Arraylist

python - `sorted(list)` 与 `list.sort()` 之间有什么区别?

java - 删除数组元素时出错

Java:对象的数组列表以及获取自动创建的复选框的值/属性