Найти объект с максимальной датой в списке, где свойство date является строкой - PullRequest
0 голосов
/ 05 февраля 2019

Скажем, у меня есть объект:

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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы также можете создать служебный метод и затем использовать его в функциональном стиле:

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

MyObject newest = max(myObjectList, comparing(parsingDate(MyObject::getDate))); 
0 голосов
/ 05 февраля 2019

Предполагая, что MyObject::getDate возвращает формат, приемлемый для LocalDate.parse, вы почти правы.Вам просто нужно написать лямбда-выражение:

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

comparing занимает Function<MyObject, T>.Вы должны дать ему метод, который принимает MyObject и возвращает что-то (что расширяет Comparable) для сравнения.

Узнайте больше о лямбдах здесь .

...