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));
我使用这种方法错了吗?是否有不同的方法可以阻止NPE而不将其从结果集中删除?
nullsLast将处理的情况下UserDTO是null.它不会让你无法getName返回null.要处理空名称,您需要在nullsLast之前应用comparing:
details.sort(comparing(
    UserDTO::getName, 
    nullsLast(naturalOrder())
));
或者,对于相反的顺序:
details.sort(comparing(
    UserDTO::getName, 
    nullsLast(reverseOrder())
));
| 归档时间: | 
 | 
| 查看次数: | 1363 次 | 
| 最近记录: |