Удалить из списка сравнения элементов с помощью Java 8 - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь использовать потоки java8 для удаления элементов из списка, основываясь на элементах объекта и путаясь в реализации. У меня есть объект с startdate, enddate и id, и я хочу сравнить объекты с другими объектами в списке, проверив, являются ли startdate и enddate одинаковыми, а затем удалить объект с наименьшими идентификаторами.

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 голосов
/ 29 октября 2018

Если ваши объекты имеют такие свойства, как (int id, Date startDate, Date endDate), вы можете сгруппировать их по некоторому классу контейнеров, например Pair из Apache Commons, а затем найти максимальный 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())
...