1. ホーム
  2. java

[解決済み] ArrayListのオブジェクトを日付でソートしますか?

2022-04-22 13:29:06

質問

どの例を見ても、アルファベット順に並んでいますが、私は日付順に並べる必要があります。

私のArrayListは、データ・メンバーの1つが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でないことが確実な場合のみ動作します。NullPointerExceptionsを避けるために、NULLも扱うのが賢明です。

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());
  }
}

あるいは、2番目の例では

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());
  }
});