在日期 属性 为字符串的列表中查找具有最大日期的对象

Find object with max date in a list where date property is a String

假设我有一个对象:

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)));

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

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

comparing需要一个Function<MyObject, T>。你应该给它一个方法,它需要一个 MyObject 和 returns 的东西(扩展 Comparable)来比较。

了解有关 lambda 的更多信息 here

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

static <T> Function<T, LocalDate> parsingDate(Function<T, String> extractor){
    return t -> LocalDate.parse(extractor.apply()));
}

MyObject newest = max(myObjectList, comparing(parsingDate(MyObject::getDate)));