Как найти ближайшую дату к данному моменту?

Есть объекты с датами LocalDateTime, мне нужно найти ближайшую дату, которая еще не наступила и получить ее id. Интересно, как это можно сделать с помощью Stream API? Но подойдут любые оптимальные варианты.


Ответы (1 шт):

Автор решения: Владимир Карсанов

Допустим сегодня 18 декабря.

LocalDateTime today = LocalDateTime.parse("2020-12-18T00:00:00");

LocalDateTime date0 = LocalDateTime.parse("2020-12-16T12:30:10");
LocalDateTime date1 = LocalDateTime.parse("2020-12-17T12:30:10");
LocalDateTime date2 = LocalDateTime.parse("2020-12-18T12:30:10");
LocalDateTime date3 = LocalDateTime.parse("2020-12-19T12:30:10");
LocalDateTime date4 = LocalDateTime.parse("2020-12-20T12:30:10");

List<LocalDateTime> dates = Arrays.asList(date0, date1, date2, date3, date4);

Optional<LocalDateTime> tomorrow = dates.stream()
        //Оставим только даты, начинающиеся с завтрашнего дня
        .filter(date -> date.toLocalDate().isAfter(today.toLocalDate()))
        //Выберем минимальную из этих дат
        .min(LocalDateTime::compareTo);

if (tomorrow.isPresent()) {
    System.out.println(tomorrow.get());
}

Выведет: 2020-12-19T12:30:10 -- то есть завтрашний день, из 5 вариантов.

→ Ссылка