gpt4 book ai didi

JAVA获取所有日期期间

转载 作者:行者123 更新时间:2023-12-02 13:36:47 25 4
gpt4 key购买 nike

我有一个函数可以记录所有旅行期间,其中可以包含航类旅行、汽车旅行和出租车等费用,并且它们都有日期。我想返回这些旅行的所有范围,例如,如果我的旅行开始于 2017-01-02 并结束于 2017-01-10 并且汽车旅行日期是2017-02-01返回日期范围应为2017-01-022017-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 语句并且在前后检查此日期,最有效的方法是什么?

最佳答案

您不必对列表进行排序即可找到范围。与比较排序的最佳情况 O(n*lg(n)) 或最坏情况相比,仅查找最小值/最大值的效率要高得多 (O(n)) O(n*n)

首先,找到三个最小值,然后获取这三个值中最小的一个。然后找到三个最大值并获得这三个中最大的一个。

最后,范围将从三个最小值中的最小值到三个最大值中的最大值。

编辑:使用最少的比较次数同时查找最大值和最小值

这个answer解释如何使用最少的比较次数找到最小值和最大值,这将进一步增强您的解决方案。

关于JAVA获取所有日期期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42949312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com