Java 按日期对ArrayList中的对象进行排序?
我发现的每个示例都是按字母顺序进行的,而我需要按日期对元素进行排序。
我的ArrayList包含其数据成员之一是DateTime对象的对象。在DateTime上,我可以调用以下函数:
lt() // less-thanlteq() // 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时,以上方法才有效。明智的是,还应处理null以避免NullPointerExceptions:
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 按日期对ArrayList中的对象进行排序? 的全部内容, 来源链接: utcz.com/qa/435405.html








