为了账号安全,请及时绑定邮箱和手机立即绑定

按日期排序ArrayList中的对象?

按日期排序ArrayList中的对象?

红糖糍粑 2019-07-02 16:49:31
按日期排序ArrayList中的对象?我找到的每一个例子都是按字母顺序进行的,而我需要按日期排序元素。我的ArrayList包含的对象中有一个是datetime对象。在DateTime上,我可以调用以下函数:lt() // less-thanlteq() // less-than-or-equal-to因此,为了比较,我可以这样做:if(myList.get(i).lt(myList.get(j))){     // ...}我应该在IF街区内做些什么?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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

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也是明智的,以避免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());
  }});


查看完整回答
反对 回复 2019-07-02
?
哔哔one

TA贡献1854条经验 获得超8个赞

自Java 8以来,列单接口提供排序方法。结合兰卜达表达式最简单的解决方案是

// sort DateTime typed list

list.sort((d1,d2) -> d1.compareTo(d2));

// or an object which has an DateTime attribute

list.sort((o1,o2) -> o1.getDateTime().compareTo(o2.getDateTime()));

// or like mentioned by Tunaki

list.sort(Comparator.comparing(o -> o.getDateTime()))


查看完整回答
反对 回复 2019-07-02
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您可以使用Collection tions.Sort方法。这是一种静态方法。把列表和比较器传递给它。它在列表上使用了一种改进的合并算法。这就是为什么你必须通过一个比较器来做这对比较。

Collections.sort(myList, new Comparator<MyObject> {
   public int compare(MyObject o1, MyObject o2) {
      DateTime a = o1.getDateTime();
      DateTime b = o2.getDateTime();
      if (a.lt(b)) 
        return -1;
      else if (a.lteq(b)) // it's equals
         return 0;
      else
         return 1;
   }});

请注意,如果myList是可比较的类型(实现可比较接口的类型)(如日期、整数或字符串),则可以省略比较器,然后使用自然排序。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 1684 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信