nullsLast处理比较器Comparator的空值安全问题
Posted gsls200808
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nullsLast处理比较器Comparator的空值安全问题相关的知识,希望对你有一定的参考价值。
java8中有个常用的比较thenComparing
例如下面这段代码
userList.sort(Comparator.comparing(User::getId).thenComparing(User::getAge));
实际上这个代码有空值安全问题,里面的age字段为null时会报错,如何解决呢?
方法是使用nullsLast或者nullsFirst
就像下面这样
list = list.stream().sorted((Comparator.comparing(
SalesOrderMonthlyStatementVo::getReviewerGroupId,Comparator.nullsLast(Long::compareTo)).thenComparing(SalesOrderMonthlyStatementVo::getReviewerId,Comparator.nullsLast(Long::compareTo)).thenComparing(SalesOrderMonthlyStatementVo::getVarieties,Comparator.nullsLast(String::compareTo))))
.collect(Collectors.toList());
里面的这种带类型的Comparator.nullsLast(Long::compareTo)
实际上有更简单的写法
Comparator.nullsLast(Comparator.naturalOrder()))
以上是关于nullsLast处理比较器Comparator的空值安全问题的主要内容,如果未能解决你的问题,请参考以下文章
Java Comparator.NullLast 抛出 NPE [重复]
java积累------后端---Comparator比较器的用法
在 JDK 7 版本以上, Comparator 要满足自反性,传递性,对称性