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

时间:2017-08-21 18:02:16

标签: 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));

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

1 个答案:

答案 0 :(得分:7)

nullsLast将处理UserDTO null的情况。它不会让您免于getName返回null。要处理空名称,您需要在nullsLast之前应用comparing

details.sort(comparing(
    UserDTO::getName, 
    nullsLast(naturalOrder())
));

或者,对于相反的顺序:

details.sort(comparing(
    UserDTO::getName, 
    nullsLast(reverseOrder())
));