SORU
8 Mayıs 2011, Pazar


Tarihe göre ArrayList nesneleri sıralama?

Biri bana bu konuda yardım edebilir mi? Bulduğum her örnek benim öğeleri tarihe göre sıralanmış ihtiyacım var ise bu alfabetik olarak yapıyor.

Benim ArrayList üzerinde datamembers bir DateTime nesnesi nesneleri içerir. DateTime işlevleri diyebilirim:

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

Gibi bir şey yapabilirim karşılaştırmak için:

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

Gerçekten içinde varsa blok ne yapacağımı bilmiyorum. Herhangi bir fikir?

CEVAP
8 Mayıs 2011, Pazar


Nesne karşılaştırılabilir yapabilirsiniz:

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

Ve sonra seni arayarak sıralama:

Collections.sort(myList);

Ancak bazen model, farklı özellikleri sıralamak istediğiniz gibi değiştirmek istemiyorum. Bu durumda, anında karşılaştırıcı oluşturabilirsiniz:

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

Ancak, yukarıda ise dateTime karşılaştırma sırasında boş olmadığından eminseniz yalnızca çalışır. Bilge boş işlemek için de NullPointerExceptions önlemek için:

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

Ya da ikinci bir örnek:

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • erikbjgn's channel

    erikbjgn's c

    12 Mayıs 2008
  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • Pocketnow

    Pocketnow

    14 EKİM 2007