在日期 属性 为字符串的列表中查找具有最大日期的对象
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)));
假设我有一个对象:
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)));