java - 使用java 8根据该对象的可为空的ArrayList属性对对象列表进行排序
问题描述
我正在尝试根据 java 8 中的可为空的 ArrayList 对列表进行排序。
列举如下
Patient1 visits = [02/15/2010, 02/10/2010]
Patient2 visits = [02/16/2010]
Patient3 visits = [02/17/2010, 02/10/2010]
Patient4 visits = null
我正在尝试使用流排序根据访问日期的降序(访问列表中的第一个元素)对患者对象进行排序。空值应放在最后。最终结果必须是
Patient3 visits = [02/17/2010, 02/10/2010]
Patient2 visits = [02/16/2010]
Patient1 visits = [02/15/2010, 02/10/2010]
Patient4 visits = null
Patient {
String name;
List<Date> visits;
}
我尝试了以下方法,但即使在空检查之后也会出现空指针异常。
list.stream()
.sorted(Comparator.nullsLast((Comparator.comparing(s -> s.getVisits() == null ? null : s.getVisits().get(0), Collections.reverseOrder()))))
.collect(Collectors.toList());
解决方案
您面临的问题是,如果您有对象,Comparator.nullsLast
就会使用它。null
Patient
这不是你的情况,因为你有null
访问。
你应该这样使用它:
list.stream()
.sorted(Comparator.comparing(
s -> s.getVisits() == null || s.getVisits().isEmpty() ?
null :
s.getVisits().get(0),
Comparator.nullsLast(Collections.reverseOrder())))
.collect(Collectors.toList());
推荐阅读
- react-native - 世博会,webview有问题,它显示页面空白屏幕
- google-assistant-sdk - 如何解决 - 验证 GoogleAssistant oauth-tool URL 时出现 oauthlib.oauth2.rfc6749.errors.MissingTokenError
- laravel - 如何从 DataTable 中删除 PDF 导出结果中的标题并将颜色表填充更改为白色?
- python - 如何使枪相对于玩家的位置
- reactjs - 如何从 Firebase 存储中获取要显示的 img_url
- css - 为什么使用我的自定义颜色渐变 CSS 类的文本无法在移动设备上正确显示?
- r - R 美元值到数字的转换,逗号、小数、美元符号、数据类型的问题
- python - 如何快速找到一百万个数字的 GCD
- c# - 在 .NET Core 3.1 API 中导入 System.IO.File 时出现问题
- mysql - MySQL如何在过滤整数列时索引在列中搜索子字符串的查询