[英]Sorting a list of objects based on a nullable ArrayList attribute of that object using java 8
我正在嘗試根據 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());
你應該嘗試這樣的事情:
Optional.ofNullable(list).map(list - > list.stream().filter(property == null)).orElse(null);
這樣您就不會嘗試在空對象上使用 .steam() 。
您可以使用本機 Java >= 8 方法
Collections.sort(/*list name*/visits, /*elements from list*/(l, r) -> /*example logic*/l.date.compareTo(r.date));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.