2016-10-06 13 views
3

我已經在使用lambda表達式進行比較的集合上實現了一個排序。我要檢查空值,所以我想出了這個解決方案的比較具有空值檢查的Java 8 lambda比較器

(a,b)->(
    (a.getStartDate() == null) 
     ? ((b.getStartDate() == null) ? 0 : -1) 
     : ((b.getStartDate() == null)?1:a.getStartDate().compareTo(b.getStartDate())) 
); 

我已經查了一些問題,比如this,但他們都指預先拉姆達代碼。

java lambda表達式讓我有機會避免兩個'if'語句嗎?我能以更清潔的方式執行任務嗎?

+0

參見http://stackoverflow.com/questions/36361156/null-safe-date-comparator-for-sorting- in-java-8-stream和http://stackoverflow.com/questions/39518961/comparator-based-on-different-nullable-fields-of-an-object和http://stackoverflow.com/questions/26350996/ java-8-comparator-nullsfirst-naturalorder-confused – Tunaki

+0

謝謝@Tunaki!刪除問題 - 編輯:不能這樣做,因爲它被回答... – Gabber

回答

17

有內Comparator默認的實現可以使用:nullsFirstnullsLast

Comparator.comparing(YourObject::getStartDate, 
    Comparator.nullsFirst(Comparator.naturalOrder()) 
)