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比较器的用法

java使用stream对日期排序

在 JDK 7 版本以上, Comparator 要满足自反性,传递性,对称性

Comparable接口与Comparator接口的比较————Comparator接口详解

java中Comparable和Comparator两种比较器的区别