gpt4 book ai didi

java - 为什么 Collections.sort (dateList,Collections.reverseOrder()) 会抛出 NPE

转载 作者:行者123 更新时间:2023-11-30 05:46:01 28 4
gpt4 key购买 nike

当我尝试这个时:

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,为什么会抛出此异常!!

最佳答案

问题在于您的输入列表 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 进行比较。

关于java - 为什么 Collections.sort (dateList,Collections.reverseOrder()) 会抛出 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828371/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com