Конвертация Date в LocalDateTime через Stream API
У меня есть внешняя библиотека, содержащая три класса Airport, Aircraft, Flight. По заданию надо вернуть список рейсов, вылетающих в ближайшие 2 часа. Написал код, он точно работает:
public static List<Flight> findPlanesLeavingInTheNextTwoHours(Airport airport) {
LocalDateTime dateNow = LocalDateTime.now();
return airport.getTerminals().stream() //получаем терминал
.flatMap(terminal -> terminal.getFlights().stream()) //только так можно получить Date
.filter(flight -> flight.getType().equals(Flight.Type.DEPARTURE)) //выбираем рейсы на вылет
.filter(flight -> flight.getDate() /*
.toInstant() вынести преобразование в отдельный метод
.atZone(ZoneId.systemDefault()) */
.toLocalDateTime().isAfter(dateNow) && flight.getDate()
.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime().isBefore(dateNow.plusHours(2)))
.collect(Collectors.toList());
}
Получать методы Flight можно только через stream. Мне надо преобразование Date(тип изменять нельзя) в LocalDateTime вынести в отдельный метод, а затем передавать значение в метод findPlanesLeavingInTheNextTwoHours(Airport airport), то есть:
public static ? convertToLD(?) {
// Date -> LocalDateTime
}
Не понимаю, как написать метод, а потом сравнить. Надеюсь, что я понятно описал вопрос, заранее спасибо.
Ответы (2 шт):
Автор решения: EvgeniiVolkov
→ Ссылка
Можно так:
public LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) {
return dateToConvert.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
}
Автор решения: Ilya
→ Ссылка
Нашел решение, вдруг кому-то поможет в будущем:
public static List<Flight> findPlanesLeavingInTheNextTwoHours(Airport airport) {
LocalDateTime dateNow = LocalDateTime.now();
return airport.getTerminals().stream()
.flatMap(terminal -> terminal.getFlights().stream())
.filter(flight -> flight.getType().equals(Flight.Type.DEPARTURE))
.filter(flight -> modifiedDate(flight)
.isAfter(dateNow) && modifiedDate(flight)
.isBefore(dateNow.plusHours(2)))
.collect(Collectors.toList());
}
public static LocalDateTime modifiedDate(Flight date) {
return LocalDateTime
.ofInstant(date.getDate().toInstant(), ZoneId.systemDefault());
}