Java 7 решение
Я использую минимальный sdk в Android, который не дает мне пользы Java 8. Я должен использовать Java 7 функций.
Map<String, DateTime> myMap = new HashMap<>();
myMap.put("a", new DateTime("2020-01-31T23:34:56Z"));
myMap.put("b", new DateTime("2020-03-01T01:23:45Z"));
myMap.put("m", new DateTime("2020-03-01T01:23:45Z"));
myMap.put("c", new DateTime("2020-02-14T07:14:21Z"));
if (myMap.isEmpty()) {
System.out.println("No data");
} else {
Collection<DateTime> dateTimes = myMap.values();
DateTime latest = Collections.max(dateTimes);
System.out.println("Latest date-time is " + latest);
}
Выходные данные из этого фрагмента находятся в моем часовом поясе (проверено на jdk.1.7.0_67):
Последняя дата-время: 2020-03-01T02 : 23: 45.000 + 01: 00
Сначала нужно проверить, пуста ли карта, потому что Collections.max()
выдаст исключение, если оно есть.
Если вам нужно удалить все записи с карты, кроме той или с теми, которые содержат самую последнюю дату:
dateTimes.retainAll(Collections.singleton(latest));
System.out.println(myMap);
{b = 2020-03-01T02: 23: 45.000 + 01: 00, m = 2020-03-01T02 : 23: 45.000 + 01: 00}
Немного сложно? Метод retainAll
удаляет из коллекции все элементы, которых нет в коллекции, переданной в качестве аргумента. Мы передаем набор только из одного элемента, самую последнюю дату-время, поэтому все остальные элементы удаляются. А удаление элементов из коллекции, которую мы получили из myMap.values()
, отражается обратно на карте, с которой мы получили коллекцию, поэтому удаляются записи, в которых значение не является последней датой. Так что этот вызов завершает это.
Примечание: рассмотрите ThreeTenABP
Если вы еще не используете Joda-Time много раз, вы можете рассмотреть возможность использования java .time, современного Java API даты и времени и преемник Joda-Time. Он был портирован и работает на низких Android уровнях API.
java .time ссылки