簡體   English   中英

使用 java 8 從比較元素的列表中刪除

[英]Remove from list comparing elements using java 8

我正在嘗試使用 java8 流從對象的基於列表的元素中刪除項目,並且對實現感到困惑。 我有一個帶有 startdate、enddate 和 id 的對象,我想通過檢查 startdate 和 enddate 是否為 eqaul 來將對象與列表中的其他對象進行比較,然后刪除具有最少 id 的對象。

startdate    enddate      Id
 ---------   ---------   ----- 
 01-01-2018  01-05-2018   1
 01-01-2018  01-05-2018   2
 01-01-2018  01-05-2018   3
 01-20-2018  01-25-2018   4
 01-20-2018  01-25-2018   5

然后結果列表將是

 startdate    enddate      Id
 ---------   ---------   -----      
 01-01-2018  01-05-2018   3    
 01-20-2018  01-25-2018   5 

如果您的對象具有 (int id, Date startDate, Date endDate) 之類的屬性,您可以使用一些容器類(如 Apache Commons 中的 Pair)將它們分組,然后在分組列表中找到最大 id:

originalObjectsList.stream()
    .collect(groupingBy(t -> new Pair(t.startDate, t.endDate)))
    .values()
    .stream()
    .map(t -> t.stream().max(Comparator.comparingInt(a -> a.id)).get())
    .collect(Collectors.toList())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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