首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Collections.sort (dateList,Collections.reverseOrder())抛出NPE

为什么Collections.sort (dateList,Collections.reverseOrder())抛出NPE
EN

Stack Overflow用户
提问于 2019-02-22 21:39:33
回答 1查看 603关注 0票数 2

当我尝试这样做的时候:

代码语言:javascript
复制
if (serviceEndDateList != null && !serviceEndDateList.isEmpty()) {
    LOG.info("serviceEndDateList::"+serviceStartDateList);
    Collections.sort(serviceEndDateList, 
    Collections.reverseOrder());
}

我正在进行堆栈跟踪:

代码语言:javascript
复制
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]

日志的输出为:

代码语言:javascript
复制
serviceEndDateList::[2001-05-17]
serviceEndDateList::[2001-05-17, 2001-05-17]

由于对象不为空,因此引发此异常的原因!!

EN

回答 1

Stack Overflow用户

发布于 2019-02-22 21:48:28

问题是您的输入列表serviceEndDateList最有可能包含一个导致比较麻烦的null值。

您必须定义是否将null值包含在集合的开头或结尾。对于这种情况,使用特殊的包装器将所有null值推到末尾:

代码语言:javascript
复制
Collections.sort(serviceEndDateList, Comparator.nullsLast(Comparator.reverseOrder()));

来自Comparator JavaDoc (强调我的):

  • Comparator::nullsFirst是一个比较器,它认为null小于非null,并将非空对象与提供的Comparator.

进行比较。

  • Comparator::nullsFirst是一个比较器,它将null视为大于非null的,并将非null对象与提供的null进行比较
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54828371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档