找到列表中的最大日期对象,其中日期属性是一个字符串

问题描述 投票:3回答:2

说我有一个对象:

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)));
java lambda java-8 comparator localdate
2个回答
3
投票

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

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

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

了解更多关于lambda表达式here


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))); 
© www.soinside.com 2019 - 2024. All rights reserved.