我正在尝试按照给定的比较器对列表进行排序。我通过NullsLast方法传递比较器,以获得比较像JavaDoc状态的Null-Friendly版本的比较器。但是,当我运行代码时,当我将String比较器传递给方法时,我仍然会得到一个Null Pointer Exception。
private <T> void sortWithDirection(List<T> details, boolean isAscending, Comparator<T> comparator){
if(isAscending){
details.sort(Comparator.nullsLast(comparator));
} else {
details.sort(Comparator.nullsLast(comparator.reversed()));
}
}
List<UserDTO> users = new ArrayList<>();
sortWithDirection(users, false, Comparator.comparing(UserDTO::getName));
我使用这种方法错了吗?是否有不同的方法可以阻止NPE而不将其从结果集中删除?
答案 0 :(得分:7)
nullsLast
将处理UserDTO
null
的情况。它不会让您免于getName
返回null
。要处理空名称,您需要在nullsLast
之前应用comparing
:
details.sort(comparing(
UserDTO::getName,
nullsLast(naturalOrder())
));
或者,对于相反的顺序:
details.sort(comparing(
UserDTO::getName,
nullsLast(reverseOrder())
));