我正在尝试对通过给定的比较器获得的列表进行排序。我正在通过 NullsLast 方法传递比较器,以获取我的比较器的空友好版本,如 JavaDoc 状态。但是,当我运行代码时,当我将 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 的情况下防止它们?
最佳答案
nullsLast
将处理 UserDTO
为 null
的情况。它不会使您免于 getName
返回 null
。要处理空名称,您需要在 比较
之前应用 nullsLast
:
details.sort(comparing(
UserDTO::getName,
nullsLast(naturalOrder())
));
或者,对于相反的顺序:
details.sort(comparing(
UserDTO::getName,
nullsLast(reverseOrder())
));
关于java - 尝试在 Java 8 中对数据中的空值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45803160/