Как найти ближайшую дату к данному моменту?
Есть объекты с датами 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 вариантов.