我找到的每个例子都是关于按字母顺序执行的,而我需要按日期排序元素.

My ArrayList包含其中一个DataMember是DateTime对象的对象.在DateTime,我可以调用以下函数:

lt() // less-than
lteq() // less-than-or-equal-to

为了进行比较,我可以这样做:

if(myList.get(i).lt(myList.get(j))){
    // ...
}

在if区内我该怎么做?

推荐答案

您可以使对象具有可比性:

public static class MyObject implements Comparable<MyObject> {

  private Date dateTime;

  public Date getDateTime() {
    return dateTime;
  }

  public void setDateTime(Date datetime) {
    this.dateTime = datetime;
  }

  @Override
  public int compareTo(MyObject o) {
    return getDateTime().compareTo(o.getDateTime());
  }
}

然后,您可以通过调用以下命令对其进行排序:

Collections.sort(myList);

然而,有时你不想改变你的模型,比如当你想对几个不同的属性进行排序时.在这种情况下,您可以动态创建比较器:

Collections.sort(myList, new Comparator<MyObject>() {
  public int compare(MyObject o1, MyObject o2) {
      return o1.getDateTime().compareTo(o2.getDateTime());
  }
});

但是,仅当您在比较时确定dateTime不为空时,上述方法才有效.最好也处理NULL,以避免NullPointerException:

public static class MyObject implements Comparable<MyObject> {

  private Date dateTime;

  public Date getDateTime() {
    return dateTime;
  }

  public void setDateTime(Date datetime) {
    this.dateTime = datetime;
  }

  @Override
  public int compareTo(MyObject o) {
    if (getDateTime() == null || o.getDateTime() == null)
      return 0;
    return getDateTime().compareTo(o.getDateTime());
  }
}

或者在第二个例子中:

Collections.sort(myList, new Comparator<MyObject>() {
  public int compare(MyObject o1, MyObject o2) {
      if (o1.getDateTime() == null || o2.getDateTime() == null)
        return 0;
      return o1.getDateTime().compareTo(o2.getDateTime());
  }
});

Java相关问答推荐

android Document File. isDirector()返回意外结果

试图弄清楚资源未能在我的Android应用程序中调用关闭警告

Kotlin ReadWriteProperty:无法使用T作为具体化类型参数.改为使用类

在现有Json文件中添加新记录

使用log 4j2格式的Hibernate 显示SQL日志(log)

当列顺序更改时,Table View列列表的Change. wasPermanted()总是返回假

将linkedHashMap扩展到Java中的POJO类

XPages-在第二次点击按钮之前延迟

在JavaFX项目中注册组合框的控件FX验证器时,模块系统出错

调用引发泛型异常的泛型方法时出现编译错误

Kotlin内联互操作:强制装箱

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

从泛型枚举创建EnumMap

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

无法使用Open WebStart Java 8运行jnlp

Java HashMap保留所有时间复杂性

如何制作回文程序?

在WHILE()循环初始化部分中声明和初始化变量的Java语法?

按长度排序字符串数组

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序