我正试图使用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())