【问题标题】:Java - Joda time List<LocalDate> find latest dateJava - Joda time List<LocalDate> 查找最新日期
【发布时间】:2015-09-22 05:28:04
【问题描述】:

以下是使用 Joda 时间 API 的日期列表,我想从下面的列表中找到最新的日期

List<LocalDate> dates = new ArrayList<LocalDate>();
dates.add(eefdTewntyArray)
dates.add(rdTewntyArray);
dates.add(idSeventyArray);

上述列表的输出

[2025-08-01, 2025-08-01, 2026-08-01]

我想选择最新的日期并存储到 LocalDate 中,它也可能会增加“n”个日期

【问题讨论】:

  • 使用Collections.sort
  • @TheLostMind LocalDateComparable(继承自 AbstractPartial
  • 如果你想要的只是最新日期,那么排序就太过分了。请改用Collections.max
  • @Misha 根据List 的“未排序”程度,排序可能会更快,但无论哪种情况,(最坏的情况),您都必须访问List 中的每个元素,当然,如果订单很重要并且您不想修改它,那也可以;)

标签: java jodatime


【解决方案1】:

使用Collections.max 这个。由于每个LocalTime 都实现了Comparable,因此这样做是安全且直接的。

List<LocalDate> dates = new ArrayList<>();
dates.add(new LocalDate(2025, 8, 1));
dates.add(new LocalDate(2025, 8, 1));
dates.add(new LocalDate(2026, 8, 1));

// prints "2006-08-01"
System.out.println(Collections.max(dates));

Collections#max 以线性时间运行,最坏情况下的性能为 O(n),而Collections#sort 基于Timsort,其最坏情况下的运行时间为 O(n log n)。如果您的日期列表变得足够大,那么我才会考虑使用排序方法;在这里,有点矫枉过正。

【讨论】:

    【解决方案2】:

    使用Collections.sortLocalDates的列表进行排序...

    List<LocalDate> dates = new ArrayList<LocalDate>();
    dates.add(new LocalDate(2025, 8, 1));
    dates.add(new LocalDate(2024, 8, 1));
    dates.add(new LocalDate(2026, 8, 1));
    
    Collections.sort(dates);
    
    System.out.println(dates);
    

    打印出来的

    [2024-08-01, 2025-08-01, 2026-08-01]
    

    现在您可以选择最早的(索引0)或最新的(索引size() - 1)。你甚至可以reverseList 更容易

    【讨论】:

      【解决方案3】:

      使用 lambda:

      对于最早的日期:

      dates.stream().sorted().findFirst().get()
      

      最新日期:

      dates.stream().sorted(Comparator.reverseOrder()).findFirst().get()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-24
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 2014-04-08
        • 2010-11-13
        • 1970-01-01
        相关资源
        最近更新 更多