尝试在Java8中使用空值对数据进行排序
我试图对通过给定的比较器得到的列表进行排序。我通过NullsLast方法传递比较器,以获得我的比较器的空友好版本,如JavaDoc状态。然而,当我运行代码时,当我将字符串比较器传递给该方法时,仍然会得到一个空指针异常尝试在Java8中使用空值对数据进行排序,java,sorting,java-8,Java,Sorting,Java 8,我试图对通过给定的比较器得到的列表进行排序。我通过NullsLast方法传递比较器,以获得我的比较器的空友好版本,如JavaDoc状态。然而,当我运行代码时,当我将字符串比较器传递给该方法时,仍然会得到一个空指针异常 private <T> void sortWithDirection(List<T> details, boolean isAscending, Comparator<T> comparator){ if(isAscending){
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));
private void sortWithDirection(列表详细信息、布尔值IsAsceding、比较器Comparator){
如果(正在搜索){
details.sort(Comparator.nullsLast(Comparator));
}否则{
sort(Comparator.nullsLast(Comparator.reversed());
}
}
列表用户=新建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())
));
你能发布你的NPE的堆栈跟踪吗?谢谢。出于某种原因,我认为这种方法的效果不同。