gpt4 book ai didi

java - 使用 java 8 根据该对象的可为空的 ArrayList 属性对对象列表进行排序

转载 作者:行者123 更新时间:2023-12-04 08:54:18 28 4
gpt4 key购买 nike

我正在尝试根据 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
我正在尝试使用流排序根据访问日期(访问列表中的第一个元素)的降序对 Patient 对象进行排序。空值应该放在最后。最终结果必须是
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());

关于java - 使用 java 8 根据该对象的可为空的 ArrayList 属性对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63919212/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com