尝试在Java 8中对数据中的Null进行排序

jDu*_*ub9 3 java sorting java-8

我试图按照比较器给出的列表进行排序.我通过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));
Run Code Online (Sandbox Code Playgroud)

我使用这种方法错了吗?是否有不同的方法可以阻止NPE而不将其从结果集中删除?

Mis*_*sha 7

nullsLast将处理的情况下UserDTOnull.它不会让你无法getName返回null.要处理空名称,您需要在nullsLast之前应用comparing:

details.sort(comparing(
    UserDTO::getName, 
    nullsLast(naturalOrder())
));
Run Code Online (Sandbox Code Playgroud)

或者,对于相反的顺序:

details.sort(comparing(
    UserDTO::getName, 
    nullsLast(reverseOrder())
));
Run Code Online (Sandbox Code Playgroud)