JAVA获取所有日期期间

标签 java sorting date

我有一个函数可以记录所有旅行期间,其中可以包含航类旅行、汽车旅行和出租车等费用,并且它们都有日期。我想返回这些旅行的所有范围,例如,如果我的旅行开始于 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/

相关文章:

java - 序列化套接字

java - 如何动态执行给变量的内容

java仅生成随机 "light"颜色

java - 在 Elastic Beanstalk 上更改 Apache Tomcat 的文件编码

java - [处理2.0]尝试创建一个随机整数数组,然后对它们进行冒泡排序

c - 对C中的for循环感到困惑

java - 按降序对字符串进行冒泡排序

java - 为什么 Java Thread.sleep 或 Date.after() 在其他计算机上的功能不同?

html - 如何让这两个日历并排显示?

ruby - 如何找到 Ruby 中两个 Date 对象之间的天数?