当我尝试这样做时:
if (serviceEndDateList != null && !serviceEndDateList.isEmpty()) {
LOG.info("serviceEndDateList::"+serviceStartDateList);
Collections.sort(serviceEndDateList,
Collections.reverseOrder());
}
我低于堆栈跟踪:
java.lang.NullPointerException
at java.util.Collections$ReverseComparator.compare(Collections.java:5117)[:1.8.0_181]
at java.util.Collections$ReverseComparator.compare(Collections.java:5108)[:1.8.0_181]
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)[:1.8.0_181]
at java.util.TimSort.sort(TimSort.java:220)[:1.8.0_181]
at java.util.Arrays.sort(Arrays.java:1512)[:1.8.0_181]
at java.util.ArrayList.sort(ArrayList.java:1462)[:1.8.0_181]
at java.util.Collections.sort(Collections.java:175)[:1.8.0_181]
日志的输出为:
serviceEndDateList::[2001-05-17]
serviceEndDateList::[2001-05-17, 2001-05-17]
由于对象不为null,为什么会引发此异常!
答案 0 :(得分:1)
问题是您的输入列表serviceEndDateList
包含一个null
值的可能性最高,该值会导致比较麻烦。
您必须定义null
值将包含在集合的开头还是结尾。在这种情况下,请使用特殊包装器将所有null
的值推到末尾:
Collections.sort(serviceEndDateList, Comparator.nullsLast(Comparator.reverseOrder()));
从Comparator
JavaDoc(强调我的):
Comparator::nullsFirst
是一个比较器,它认为null
比非null小 ,并将非null对象与提供的Comparator
进行比较。Comparator::nullsLast
是一个比较器,它认为null
比非null大 ,并将非null对象与提供的Comparator
进行比较。