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()))