nullsLast处理比较器Comparator的空值安全问题

2022-07-13 10:29:26

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()))
  • 作者:gsls200808
  • 原文链接:https://blog.csdn.net/gsls200808/article/details/120753071
    更新时间:2022-07-13 10:29:26