Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Java8中使用空值对数据进行排序_Java_Sorting_Java 8 - Fatal编程技术网

尝试在Java8中使用空值对数据进行排序

尝试在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){

我试图对通过给定的比较器得到的列表进行排序。我通过NullsLast方法传递比较器,以获得我的比较器的空友好版本,如JavaDoc状态。然而,当我运行代码时,当我将字符串比较器传递给该方法时,仍然会得到一个空指针异常

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的堆栈跟踪吗?谢谢。出于某种原因,我认为这种方法的效果不同。