На первый взгляд использование строковых литералов для представления даты не является хорошим подходом и делает его более хрупким и подверженным ошибкам. Вы бы предпочли использовать LocalDate
в первую очередь. Однако, исходя из предположения, что вы не имеете никакого контроля над этим форматом данных (например, он поступает из другой сторонней системы), мы все же можем разработать подход, который решает проблему под рукой. Вот как это выглядит.
Entry<String, String> maxEntry = map.entrySet().stream()
.max(Comparator.comparing(e -> LocalDate.parse(e.getValue())))
.orElseThrow(IllegalArgumentException::new);
LocalDate.parse
используется для преобразования строкового представления даты в LocalDate
, который является сопоставимым. Затем Comparable
передается как ключ к методу построения Comparator
. И вот пара выходных ключ-значение при успешном выполнении:
4=2014-09-09
Если вы можете просто обойтись без строкового представления даты, как предложено выше, то вы можете сделать вышеприведенное решение намного проще и лаконичнее.
Entry<String, LocalDate> maxEntry = map.entrySet().stream()
.max(Map.Entry.comparingByValue())
.orElseThrow(IllegalArgumentException::new);