2015-11-24 410 views
0

我試圖執行自定義排序的日曆對象(從節點類中提取),遇到的任何空值都會推到最後。如果比較器遇到空值,則不會進行排序

這是我的代碼:

public class CustomComparatorPubDate implements Comparator<Node> { 

@Override 
public int compare(Node o1, Node o2) { 
    try { 
     Calendar d1 = o1.getProperty("jcr:content/metadata/jcr:pubdate").getDate(); 
     Calendar d2 = o2.getProperty("jcr:content/metadata/jcr:pubdate").getDate(); 
     LOGGER.debug("d1: " + d1); 
     LOGGER.debug("d2: " + d2); 
     if (d2 == null && d1 == null) return 0; 
     if (d1 == null) return 1; 
     if (d2 == null) return -1; 

     int compar = d1.compareTo(d2); 
     LOGGER.debug("compar: " + compar); 
     return compar; 

    } catch (RepositoryException e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return 0; 
     } 
    } 
} 

我上面級呼叫:

Collections.sort(listofnodes, new CustomComparatorPubDate()); 

我有一個測試陣列,其中對象的屬性之一是故意保留爲空進行測試,其中這失敗。如果我填充該屬性,它似乎工作正常。

任何想法什麼是錯的,以及如何解決這個問題?

P.S:Eclipse不允許我在沒有try/catch塊的情況下編寫它。

編輯:在日誌中我看到,它拋出一個javax.jcr.PathNotFoundException

+0

_where this fail_incail是什麼? – gonzo

+0

它不排序。在排序操作之前和之後,感興趣的列表數組保持不變。 –

+0

請發佈stacktrace。 – d33t

回答

0

看起來像你有一點點錯誤:如果D1是空你D2之前整理它,即使D2不爲空。

if (d1 == null) return 1;

所以,如果你改變了這個返回-1應該排序你正在尋找的方式。

+0

不可用。我試過了,它仍然是一樣的。感謝您的嘗試。 –

相關問題