Удалить из списка сравниваемые элементы с помощью java 8

Я пытаюсь использовать потоки 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 

Где ты застрял? Что ты пробовал?

Nicholas K 29.10.2018 18:46

давайте не будем сразу понижать голос .. @arjun: не могли бы вы обновить, что вы пробовали, а что не работает

Abhinav 29.10.2018 18:49

Вы уже пробовали использовать фильтр потока?

BrentR 29.10.2018 18:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
3
348
1

Ответы 1

Если у ваших объектов есть такие свойства, как (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())

Пара абстрактна и не может быть создана?

user09 29.10.2018 21:42

Нет. commons.apache.org/proper/commons-lang/apidocs/org/apache/… - вы можете создать свой собственный объект-контейнер с equals / hashcode для группировки

jprogramista 29.10.2018 21:49

В документе пара упоминается как аннотация. Реализации включают изменяемые и неизменяемые. Я пробую Immutable, чтобы посмотреть, как это работает!

user09 29.10.2018 21:57

Другие вопросы по теме