当我尝试这样做的时候:
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]由于对象不为空,因此引发此异常的原因!!
发布于 2019-02-22 21:48:28
问题是您的输入列表serviceEndDateList最有可能包含一个导致比较麻烦的null值。
您必须定义是否将null值包含在集合的开头或结尾。对于这种情况,使用特殊的包装器将所有null值推到末尾:
Collections.sort(serviceEndDateList, Comparator.nullsLast(Comparator.reverseOrder()));来自Comparator JavaDoc (强调我的):
Comparator::nullsFirst是一个比较器,它认为null的小于非null,并将非空对象与提供的Comparator.进行比较。
Comparator::nullsFirst是一个比较器,它将null视为大于非null的,并将非null对象与提供的null进行比较https://stackoverflow.com/questions/54828371
复制相似问题