2010-09-08 9 views

cevap

25

Doğal olarak bu sizin seçiminizdir. Yazdığınız her mantık, sıralama kurallarını tanımlayacaktır. Yani 'burada olmalı' gerçekten doğru kelime değil.

Başka eleman huzuruna boş istiyorsanız, böyle bir şey Duruma göre

public int compare(MyBean o1, MyBean o2) { 
    if (o1.getDate() == null) { 
     return (o2.getDate() == null) ? 0 : -1; 
    } 
    if (o2.getDate() == null) { 
     return 1; 
    } 
    return o2.getDate().compareTo(o1.getDate()); 
} 
+1

NULL'lerini öndeki olarak artan şekilde sıralamak istediğinizde, ancak bunların sonuna düştüğünüzde ne olur? Özünde tamamen listeyi çevirin? – Jeremy

+0

Bu kodu kullandım ve Collections.reverseOrder() öğesini denedim ve Collections.reverse (List) ile aynı şekilde çalışmadı; – Jeremy

+0

@Jeremy evet u haklıyım aynı sorunla karşı karşıyayım tüm boş değer verileri önce gelir ve değerli veriler sonunda gelir. –

2

yapabileceğini, büyük bir değer veya düşük bir değer olarak boş olarak kabul ederiz.

Çoğu zaman null < herşeyi düşünebilirsiniz, ancak bu içeriğe bağlıdır.

Ve 0 burada korkunç bir dönüş değeri olurdu.

1

Nikita Rybak'ın yanıtını takiben, bir enum karşılaştırıcısına sahibim ve yalnızca boş mantığı buraya ekleyin.

public enum Orden implements Comparator<CmunParametrosDTO> { 
     ByStrDescripcion { 
      public int compare(CmunParametrosDTO item1, CmunParametrosDTO item2) { 
       if (item1.getStrDescripcion() == null && item2.getStrDescripcion() == null) 
        return 0; 
       if (item1.getStrDescripcion() == null) 
        return 1; 
       else if (item2.getStrDescripcion() == null) 
        return -1; 
       return item1.getStrDescripcion().compareTo(item2.getStrDescripcion()); 
      } 
     } 
     public abstract int compare(CmunParametrosDTO item1, CmunParametrosDTO item2); 

     public Comparator<CmunParametrosDTO> ascending() { 
      return this; 
     } 

     public Comparator<CmunParametrosDTO> descending() { 
      return Collections.reverseOrder(this); 
     } 
} 

Bu formda, listemdeki sıralama yöntemini çağırabilirim.

if(isBolOrdAscendente()) Collections.sort(listado, CmunParametrosDTO.Orden.ByStrDescripcion .ascending()); 
    else Collections.sort(listado, CmunParametrosDTO.Orden.ByStrDescripcion .descending()); 
+0

Çok teşekkürler ELD ..after çok arandı ... ur çözüm benim için çalıştı: D :) –

12

Java 8'de de nullsFirst() kullanabilirsiniz:

Comparator.nullsFirst(Date::compareTo).compare(dateOne, dateTwo); 

Veya nullsLast():

Comparator.nullsLast(Date::compareTo).compare(dateOne, dateTwo); 

Bu yöntemler olacak ya sıralama başlangıcına veya sonuna null. null'u başka nesnelerden daha büyük veya daha küçük olarak düşünürseniz yanlış ya da yanlış yoktur. Bu tamamen size kalmış, diğerleri zaten belirttiği gibi.

+0

Güzel, Java bu konuda biraz gelişti gibi görünüyor –