当前位置: 首页 > 面试题库 >

在日期列表中查找最接近目标的日期的最佳方法?

牟慎之
2023-03-14
问题内容

我有一个日期对象列表和一个目标日期。我想在列表中找到最接近目标日期的日期,但仅找到目标日期之前的日期。

示例:2008-10-1 2008-10-2 2008-10-4

目标日期为2008-10-3,我想获得2008-10-2

最好的方法是什么?


问题答案:

Sietse de Kaper解决方案采用了 反向 排序的列表,绝对不是最自然的解决方案

Java中的自然排序顺序遵循递增的自然顺序。(请参阅Collection.sort
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#sort(java.util.List)文档)

从您的例子来看,

目标日期= 2008-10-03 
清单= 2008-10-01 2008-10-02 2008-10-04

如果另一个开发人员以幼稚的方式使用您的方法,他将获得2008-10-01的期望值

  • 不要假设列表的顺序。
  • 如果出于性能原因必须这样做,请尝试遵循最自然的惯例(升序排列)
  • 如果您确实必须遵循另一条约定,那么您确实应该记录下来。
    private Date getDateNearest(List<Date> dates, Date targetDate){
      Date returnDate = targetDate
      for (Date date : dates) {
        // if the current iteration'sdate is "before" the target date
        if (date.compareTo(targetDate) <= 0) {
          // if the current iteration's date is "after" the current return date
          if (date.compareTo(returnDate) > 0){
            returnDate=date;
          }
        }
      }  
      return returnDate;
    }

编辑-我也喜欢Treeset的答案,但我认为它可能会稍微慢一些,因为它等效于对数据进行排序然后查找==
nlog(n)进行排序,然后文档暗示它是log(n)以便进行访问,因此那应该是nlog(n)+ log(n)vs n



 类似资料:
  • 问题内容: 给定此基准日期: 我想在列表中找到一个包含最接近日期的元组,但是它不能是更早的日期。 所以这里的输出应该是(它不能是第三个元组,因为那里的日期早于基准日期) 我的问题是,是否存在用于此类日期比较的任何模块?我试图先将所有数据更改为格式,然后进行比较,但是我的代码变得很丑陋,而且切片很多。 @编辑: 要测试的大清单: 要测试的大清单: 问题答案: 将日期转换为datetime对象,所以现

  • 我有两个日期字段: 开始日期和结束日期和临时日期。 我有一个列表,其中我在开始日期和结束日期之间返回了6条记录。我如何过滤记录并返回最接近临时日期的日期时间? 在示例记录中,我需要获得第二条记录,因为与临时日期相近。实例

  • 我有一个表,其中存储了里程碑(id、描述、日期),并且给定了一些事件日期,我希望找到最接近该日期的里程碑。 我正在使用Spring Data JPA,但我似乎不知道该怎么做。根据可用的函数,似乎没有任何本身可用的东西来查找最接近的日期。目前,我想到的最好的主意是使用原始sql,类似于 然后,我会在我的存储库上有一个函数,例如 我对这种方法的主要关注点是,我必须依赖于特定于DBMS的函数来执行日期差

  • 问题内容: 我在Java中有三个约会:a,b,c。这些日期中的任何一个或所有日期都可以为空。在没有大量if- else块的情况下确定a,b,c中最早日期的最有效方法是什么? 问题答案: 无法避免空值检查,但是通过一些重构,您可以使其变得更轻松。 创建一个安全地比较两个日期的方法: 然后结合调用: 实际上,您可以将此方法用作任何通用方法:

  • 问题内容: 我有以下postgresql语法,该语法返回WHERE session_date与$ date_string匹配的值 问题是有时$ date_string在表中不可用,所以我想返回最接近$ date_string的日期。 有什么想法可以做到这一点吗? 问题答案: 如果您想要最近的日期,请按照以下方式进行操作: 之后的最接近日期使用类似的逻辑。 对于最接近的一方:

  • 问题内容: 我需要从MySQL表中获取与当前日期最接近的日期。 这是我的桌子: 因此,如果查询今天运行,它将返回 任何帮助深表感谢。谢谢 问题答案: