Не помещайте строки в свой список. Положите LocalDate
объектов. Точно так же, как вы не будете хранить числа в виде строк в списке (я надеюсь).
Кроме того, я нашел код в некоторых других ответах немного многословным. С помощью LocalDate
объектов в списке можно найти самую последнюю дату в одной строке.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMMM dd, uuuu", Locale.ENGLISH);
List<LocalDate> dateList = new ArrayList<>();
dateList.add(LocalDate.parse("October 09, 2019", dateFormatter));
dateList.add(LocalDate.parse("August 20, 2018", dateFormatter));
dateList.add(LocalDate.parse("October 09, 2019", dateFormatter));
dateList.add(LocalDate.parse("August 31, 2019", dateFormatter));
LocalDate latest = Collections.max(dateList);
System.out.println("End result: " + latest.format(dateFormatter));
Выходные данные этого фрагмента:
Конечный результат: 09 октября 2019 г.
Поскольку названия месяцев указаны на английском языке, мы должны предоставить англоязычную локализацию, чтобы убедиться, что код работает на всех JVM независимо от настроек локали по умолчанию.
Collections.max
выдаст NoSuchElementException
, если список пуст.
Если вы не можете позволить себе изменить список, чтобы он содержал LocalDate
объектов только сейчас, используя тот же форматер, что и раньше:
String latest = Collections.max(datelist,
Comparator.comparing(s -> LocalDate.parse(s, dateFormatter)));
System.out.println("End result: " + latest);
Вывод такой же, как и раньше.