说我有一个对象:
<stage stageid="some_stage_id" name="Send Keys Stage" type="Navigate">
<subsheetid>some_sheet_id</subsheetid>
<loginhibit />
<narrative>
</narrative>
<displayx>15</displayx>
<displayy>-30</displayy>
<displaywidth>120</displaywidth>
<displayheight>60</displayheight>
<font family="Segoe UI" size="10" style="Regular" color="000000" />
<onsuccess>next_stage_id</onsuccess>
<step>
<element id="action_on_element_id" />
<action>
<id>UIASendKeys</id>
<arguments>
<argument>
<id>newtext</id>
<value>"Testing keys"</value>
</argument>
<argument>
<id>interval</id>
<value>
</value>
</argument>
</arguments>
</action>
</step>
</stage>
在这些对象的列表中,可以很容易地找到具有最新日期的对象:
public class MyObject {
private LocalDate date;
}
当日期为String时,是否存在一种类似的简洁方法来查找具有最新日期的对象?我需要先将日期转换为LocalDates,但不能执行以下操作:
MyObject newest = Collections.max(myObjectList, Comparator.comparing(MyObject::getDate));
答案 0 :(得分:3)
假设MyObject::getDate
返回了LocalDate.parse
可接受的格式,那么您几乎是正确的。您只需要编写一个lambda表达式:
Comparator.comparing(o -> LocalDate.parse(o.getDate()))
comparing
需要一个Function<MyObject, T>
。您应该给它提供一个方法,该方法需要一个MyObject
并返回(扩展了Comparable
)以进行比较。
了解有关Lambda here的更多信息。
答案 1 :(得分: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)));