【问题标题】:Find object with max date in a list where date property is a String在日期属性为字符串的列表中查找具有最大日期的对象
【发布时间】:2019-06-29 01:32:12
【问题描述】:

假设我有一个对象:

public class MyObject {
     private LocalDate date;
}

在这些对象的列表中,很容易找到日期最新的对象:

MyObject newest = Collections.max(myObjectList, Comparator.comparing(MyObject::getDate));

当日期是字符串时,是否有类似的简洁方法来查找具有最新日期的对象?我需要先将日期转换为 LocalDates,但我不能这样做:

MyObject newest = Collections.max(myObjectList, Comparator.comparing(LocalDate.parse(MyObject::getDate)));

【问题讨论】:

  • 取决于日期格式。如果是yyyyMMdd一个简单的字典排序就足够了

标签: java lambda java-8 comparator localdate


【解决方案1】:

假设MyObject::getDate 返回LocalDate.parse 可接受的格式,您几乎是正确的。你只需要写一个 lambda 表达式:

Comparator.comparing(o -> LocalDate.parse(o.getDate()))

comparing 采用Function<MyObject, T>。你应该给它一个接受MyObject的方法并返回一些东西(扩展Comparable)供它比较。

详细了解 lambdas here

【讨论】:

    【解决方案2】:

    您还可以创建一个实用方法,然后以函数式样式使用它:

    static <T> Function<T, LocalDate> parsingDate(Function<T, String> extractor){
        return t -> LocalDate.parse(extractor.apply()));
    }
    
    MyObject newest = max(myObjectList, comparing(parsingDate(MyObject::getDate))); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2012-08-18
      • 2018-06-27
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多