java - 尝试在 Java 8 中对数据中的空值进行排序

标签 java sorting java-8

我正在尝试对通过给定的比较器获得的列表进行排序。我正在通过 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 将处理 UserDTOnull 的情况。它不会使您免于 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/

相关文章:

java - JSF SessionScoped 属性未设置

java - 重复字符的正则表达式模式

algorithm - 冒泡排序算法分析

Java 8 流 Map<String, List<String>> 每个键值的总和

Java 流排序不起作用

java - ListView 无法使用 JavaFX FXML 正确更新

arrays - 对长度为 n 的未排序数组的 t 个最小整数进行排序

python - 将字符串列表 [ '3' , '1' , '2' ] 转换为排序整数列表 [1, 2, 3]

包含函数的 java 枚举 - 使用 switch 或 seller 作为成员变量

java - Spring 的构造函数注入(inject)和数组