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

  • megablueblaster

    megablueblas

    23 HAZİRAN 2006
  • SRI International

    SRI Internat

    30 NİSAN 2008
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009