具有不同排序选项的 Java 自定义比较器

标签 java sorting comparator

我有一个 Item 类,它有两个属性 - id 和 timestamp。有一个自定义比较器类可以根据时间戳对 itemList 进行排序。

有没有一种方法可以使用比较器类,以便我可以指定按时间戳排序或按 ID 排序?

项目类别:

   public class  Item {

      private Integer id;
      private Date timestamp;

}

比较器:

public class ItemComparator implements Comparator<Item>{
  @Override
  public int compare(Item mdi1, Item mdi2) {

    return mdi1.getTimestamp().compareTo(mdi2.getTimestamp());

   }

}

排序代码:

 Collections.sort(itemList, new ItemComparator());

我也可以使用相同的比较器按 Id 对列表进行排序吗?

最佳答案

经过一些修改,是的。

添加一个带有枚举参数的构造函数来定义要使用的字段:

public class ItemComparator implements Comparator<Item>{
    public enum Field {
        ID, TIMESTAMP;
    }

    private Field field;

    public ItemComparator(Field field) {
        this.field = field;
    }

然后在比较方法中,switch选择的字段:

@Override
public int compare(Item mdi1, Item mdi2) {
    int comparison = 0;
    switch(field) {
    case TIMESTAMP:
        comparison = mdi1.getTimestamp().compareTo(mdi2.getTimestamp());
    case ID:
        comparison = mdi1.getID() - mdi2.getID();
    }
    return comparison;
}

关于具有不同排序选项的 Java 自定义比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688247/

相关文章:

LINQ OrderBy 字符串参数

java - 优先级队列中的比较器有错误

java - 如何仅使用一个比较器对对象中的所有字段进行排序?

java - 使用 java Runtime() 或 Process Builder 执行或运行应用程序

javascript - 根据与另一个数组的最佳匹配对对象数组进行排序

python - 使用给定的输入列表对 DataFrame 列进行排序

swift - 无法将类型 'AnyObject' 的返回表达式转换为返回类型 'NSComparisonResult'

java - Quartz 工作没有开始

JavaFX:适配器、ObjectProperty 和双向绑定(bind)

java - 如何将一个列表划分为一个较小的列表