У меня есть функция, которая охватывает весь период поездки, которая может включать в себя перелеты, поездки на автомобиле и расходы, такие как такси и т. Д., И все они имеют даты. Я хочу вернуть весь диапазон этих поездок, например, если у меня есть поездка с началом в 2017-01-02 и окончанием в 2017-01-10, а дата поездки на автомобиле Диапазон дат возврата 2017-02-01 должен быть следующим: 2017-01-02 и 2017-02-01.
public DateRange updateClaimDates(Claim claim) {
DateRange dates = new DateRange();
if (!claim.getFlights().isEmpty()) {
List<Flight> sortedFlights = Lambda.sort(claim.getFlights(), Lambda.on(Flight.class).getStartDate());
dates.setStartDate(sortedFlights.get(0).getStartDate());
dates.setEndDate(sortedFlights.get(sortedFlights.size() - 1).getEndDate());
}
if (!claim.getCarTrips().isEmpty()) {
List<CarTrip> carTrips = Lambda.sort(claim.getCarTrips(), Lambda.on(CarTrip.class).getTripDate());
dates.setStartDate(carTrips.get(0).getTripDate().before(dates.getStartDate()) ? carTrips.get(0).getTripDate() : dates.getStartDate());
dates.setEndDate(carTrips.get(carTrips.size() - 1).getTripDate().after(dates.getEndDate()) ? carTrips.get(carTrips.size() - 1).getTripDate() : dates.getEndDate());
}
if (!claim.getExpenses().isEmpty()) {
List<Expense> sortedExpenses = Lambda.sort(claim.getExpenses(), Lambda.on(Expense.class).getDate());
dates.setStartDate(sortedExpenses.get(0).getDate().before(dates.getStartDate()) ? sortedExpenses.get(0).getDate() : dates.getStartDate());
dates.setEndDate(sortedExpenses.get(sortedExpenses.size() - 1).getDate().after(dates.getEndDate()) ? sortedExpenses.get(sortedExpenses.size() - 1).getDate() : dates.getEndDate());
}
return dates;
}
Что было бы наиболее эффективным способом без трех операторов if и проверки этой даты после и до?