说我有一个对象:
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
返回的格式是LocalDate.parse
可以接受的,你是接近正确。你只需要编写一个lambda表达式:
Comparator.comparing(o -> LocalDate.parse(o.getDate()))
comparing
需要Function<MyObject, T>
。你应该给它,需要一个MyObject
和返回的东西(扩展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)));