У меня есть хэш-карта со значениями ниже, в значениях у меня дата в качестве строкового типа данных. Я хотел бы сравнить все даты, которые доступны на карте, и извлечь только одно значение ключа, которое имеет очень недавнюю дату.
Я хотел бы сравнить со значениями, а не ключами.
Я включил код ниже
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "1999-01-01");
map.put("2", "2013-10-11");
map.put("3", "2011-02-20");
map.put("4", "2014-09-09");
map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v));
}
}
Ожидаемый результат для этого:
Ключ 4 Значение 2014-09-09
LocalDate
предметы. Остальная часть кода, вероятно, будет такой же, за исключением объявления типа карты.Ответы:
Это должно обеспечить самую новую (или самую большую) дату по сравнению с другими.
Если вам также нужен ключ, сделайте это и верните Map.Entry. Требуется Java 9+
Это предполагает, что ваша карта не пуста. если он пуст, он возвращает ноль. Работает с Java 8+
источник
Используйте Collections.max с entrySet
или
источник
Map.Entry.comparingByValue()
Является изящным (с Java 8).На первый взгляд использование строковых литералов для представления даты не является хорошим подходом и делает его более хрупким и подверженным ошибкам. Вы бы предпочли использовать
LocalDate
в первую очередь. Однако, учитывая, что вы не имеете никакого контроля над этим форматом данных (например, он поступает из другой сторонней системы), мы все же можем разработать подход, который решает проблему под рукой. Вот как это выглядит.LocalDate.parse
Используются для преобразования строкового представления даты вLocalDate
которых является сопоставимым. ЭтоComparable
затем передается в качестве ключа кComparator
способу строительства. И вот пара выходных ключ-значение при успешном выполнении:Если вы можете просто отказаться от строкового представления даты, как предложено выше, то вы можете сделать вышеприведенное решение намного проще и лаконичнее.
источник
Это должно работать
выход
Optional[4=2014-09-09]
источник
Вы можете разобрать строку
LocalDate
и отсортировать ее в обратном порядкеисточник
Вы можете сделать либо:
или :
Оба будут давать одинаковый результат.
источник
Map.Entry.comparingByValue()
Является изящным (с Java 8).