Я пытаюсь использовать потоки java8 для удаления элементов из элементов объекта на основе списка и запутался при реализации. У меня есть объект с startdate, enddate и id, и я хочу сравнить объекты с другими объектами в списке, проверив, являются ли startdate и enddate равными eqaul, а затем удалить объект с наименьшими идентификаторами.
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
давайте не будем сразу понижать голос .. @arjun: не могли бы вы обновить, что вы пробовали, а что не работает
Вы уже пробовали использовать фильтр потока?




Если у ваших объектов есть такие свойства, как (int id, Date startDate, Date endDate), вы можете сгруппировать по ним, используя некоторый контейнерный класс, например Pair из Apache Commons, а затем найти максимальный идентификатор в сгруппированных списках:
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())
Пара абстрактна и не может быть создана?
Нет. commons.apache.org/proper/commons-lang/apidocs/org/apache/… - вы можете создать свой собственный объект-контейнер с equals / hashcode для группировки
В документе пара упоминается как аннотация. Реализации включают изменяемые и неизменяемые. Я пробую Immutable, чтобы посмотреть, как это работает!
Где ты застрял? Что ты пробовал?