使用java8从列表中删除比较元素



我正试图使用java8流来从对象的基于列表的元素中删除项目,并且在实现上很混乱。我有一个具有startdate、enddate和id的对象,我想通过检查startdate和enddate是否相等来将对象与列表中的其他对象进行比较,然后删除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())

最新更新