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

  • Maschine Tutorials

    Maschine Tut

    15 ŞUBAT 2011
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010
  • snookie77

    snookie77

    2 Mart 2006