在一个列表中查找日期属性为字符串的对象中最大日期的对象。

3

假设我有一个对象:

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

1
取决于日期格式。如果是“yyyyMMdd”,那么简单的字典排序就足够了。 - jhamon
2个回答

3

假设MyObject::getDate返回的格式可以被LocalDate.parse接受,你的答案就接近正确了。你需要编写一个Lambda表达式:

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

比较需要一个 Function<MyObject, T>。您应该提供一个方法,它接受一个 MyObject 并返回一个可以进行比较的值(扩展自 Comparable)。

在此处了解更多关于 lambda 表达式的信息:这里


0

你也可以创建一个实用方法,然后以函数式风格使用它:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接