我正在尝试使用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
答案 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())