#java #map #treemap
#java #Карта #treemap
Вопрос:
в моем коде у меня есть ArrayList<TreeMap<String, Object>>
. Что TreeMap
было бы, так это ключ и значение. существует ключ с именем sent_date со значением в формате yyyy-MM-DD HH:MM:SS
. Я не могу найти способ отсортировать этот список…Может кто-нибудь, пожалуйста, помочь? Спасибо.
Комментарии:
1. Как именно вы хотите, чтобы ваш список был отсортирован? Что вы уже пробовали?
2. Вы хотите сказать, что каждый
TreeMap
элемент содержит только 1 запись? Почему бы просто не использовать aTreeMap
иArrayList
полностью отказаться от него, если это так?3. Будет ли таблица guava лучшей структурой данных? docs.guava-libraries.googlecode.com/git-history/v17.0/javadoc /…
4.
TreeMap
имеет больше записей, и sent_date является одной из них.5. когда я попытался перебрать
ArrayList
и распечатать значения вTreeMap
, я хотел бы упорядочить их по sent_date . Я думал, что это можно сделать сразу после того, как все элементы будут добавлены вArrayList
so, поэтому мне не нужно менять свой цикл
Ответ №1:
Вы можете использовать Collections.sort(list, comparator)
, где вам нужно реализовать a Comparator<Map<String,?>>
, чтобы делать то, что вам нужно (т. Е. извлекать sent_date
из двух карт и сравнивать их).
Комментарии:
1. Я также буду 1 любому, кто опубликует краткую реализацию с новыми функциями Java8. Теперь это должно быть возможно без особых шаблонов.
2. компаратор — это та часть, которую я не понимаю… Не могли бы вы привести мне еще один пример?
Ответ №2:
В Java 8 это было бы (для сортировки, которая изменяет список):
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
list.sort(Comparator.comparing(m -> LocalDateTime.parse(m.get("sent_date"), format)));
Или, если вы хотите сохранить исходный список:
newList = list.stream()
.sorted(Comparator.comparing(...))
.collect(Collectors.toList());
Комментарии:
1. хм … у меня java7:(