当前位置: 首页 > 知识库问答 >
问题:

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

苗运珧
2023-03-14
   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对列表进行排序吗?

共有1个答案

傅增
2023-03-14

经过一些修改,是的。

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

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

    private Field field;

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

然后在compare方法中,在所选字段上使用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;
}
 类似资料:
  • “StringComparator”在“arrays.sort(b,new StringComparator());”出货量和预期的一样。 但当我使用默认排序(步骤如下),然后按“StringComparator”排序时,bug显示: “Arrays.Sort(a);Arrays.Sort(a,new StringComparator());”

  • 问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序

  • 我想按字母顺序对字段名列表进行排序,但是我需要在比较器的doCompare方法中包含一个条件,以便如果字段名是“pk”,则始终将其排序到列表的顶部。我所拥有的内容如下,但我不确定我是否采取了正确的方法,特别是reurn值为-1000。对此的任何建议都将不胜感激。

  • 在我的PriorityQueue中,我有两种类型的客户,即VIP和常规客户。我想先为贵宾服务,再为常客服务。 如果CustomerID<100,则视为VIP。 如果客户是VIP,他会排在队列中VIP部分的最后 更新:我不想排序任何其他列除了VIP。我不想添加“日期”,因为它感觉像是一个黑客,而不是理解Java是如何工作的。

  • 下面的代码片段适用于条件1,但不适用于条件2。

  • 我正在使用Android应用程序,我想以某种方式打印HashMap的键和值。假设以下是HashMap的内容: 我想以这样一种方式打印HashMap键和值,即字母键首先按字母顺序打印,然后是数字键按升序打印: 我现在做的是: > < li> 获取密钥集并将其保存到数组列表中 使用比较器对数组列表进行排序 使用排序列表打印出地图中的值 这是我的代码: 到目前为止,它还在工作,但是在某些情况下,我没有得