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

时间:2018-10-29 17:45:57

标签: java list java-8 java-stream

我正在尝试使用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 

1 个答案:

答案 0 :(得分:0)

如果您的对象具有(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())