簡體   English   中英

使用 java 8 根據該對象的可為空的 ArrayList 屬性對對象列表進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM