提问人:Shiv 提问时间:8/24/2023 更新时间:8/25/2023 访问量:41
如何在 java 中使用 Comparator.comparing 在链接对象键进行比较之前检查 null
How to check for null before comparing by linked object key using Comparator.comparing in java
问:
Comparator.comparing(ProjectVo::getCategory, Comparator.comparing(ProjectCategoryVo::getName))
但是,category 可以为 null,因此在排序时会抛出异常
如何为类别应用空比较器?
答:
0赞
iamgirdhar
8/25/2023
#1
可以使用 nullsFirst
或 nullsLast
方法,以便在比较期间处理 null 值。java.util.Comparator
1.使用 nullsFirst
方法
Comparator.comparing(ProjectVo::getCategory,
Comparator.comparing(ProjectCategoryVo::getName),
Comparator.nullsFirst(Comparator.naturalOrder()));
2.使用 nullsLast
方法
Comparator.comparing(ProjectVo::getCategory,
Comparator.comparing(ProjectCategoryVo::getName),
Comparator.nullsLast(Comparator.naturalOrder()));
您可以根据自己的类型使用 or 和 和 方法 排序。
Comparator.naturalOrder()
Comparator.reverseOrder()
nullsFirst
nullsLast
0赞
scrhartley
8/25/2023
#2
您无需使用 naturalOrder 来防止 getCategory 返回 null:
Comparator.comparing(ProjectVo::getCategory,
Comparator.nullsFirst(Comparator.comparing(ProjectCategoryVo::getName)));
如果我担心getName返回null,我会使用这个技巧:
Comparator.comparing(ProjectVo::getCategory,
Comparator.comparing(ProjectCategoryVo::getName,
Comparator.nullsFirst(Comparator.naturalOrder())));
如果我担心 ProjectVo 为 null:
Comparator.nullsFirst(Comparator.comparing(ProjectVo::getCategory,
Comparator.comparing(ProjectCategoryVo::getName)));
评论
0赞
Shiv
8/25/2023
感谢您的回复。我使用 Comparator.comparing((ProjectVo pvo) -> { return pvo.getCategory() == null 实现了它?“” : pvo.getCategory().getName();你觉得这有什么问题吗?
2赞
Holger
8/25/2023
@Shiv这将考虑空字符串并相等,并为它们产生不可预测的顺序。另一个问题是没有理由进行这种手动处理。null
评论