У меня есть HashMap со временем в качестве ключа. Я отсортировал HashMap. Теперь я хочу получить все значения ключей между двумя ключами, то есть значениями времени.
Отфильтруйте те, которые "до" минимальные и "после" максимальные данные. С какими трудностями вы сталкиваетесь при этом?
Как упомянул @SeanPatrickFloyd, нет такой вещи, как сортировка HashMap
. А TreeSet
, который отсортирован по является, имеет для этого встроенный метод
Что вы пробовали? Что пошло не так ? Приведите пример ввода/вывода?
Вы имеете в виду связанную хеш-карту?
Да, карта дерева @SeanPatrickFloyd
HashMap — это не TreeMap. Используйте опцию редактировать, чтобы уточнить свой вопрос.
Вот пример кода. TreeMap
реализует интерфейс NavigableMap
, поэтому убедитесь, что вы используете его в качестве типа переменной, чтобы использовать всю мощь TreeMap
:
NavigableMap<Integer, String> map = new TreeMap<>();
// code to fill my map with values from 1 to 20, key=int, value=String.valueOf(int)
IntStream.rangeClosed(1,20).forEach(i->map.put(i, String.valueOf(i)));
В NavigableMap есть метод .subMap(start, end)
и перегруженная версия .subMap(start, startInclusive, end, endInclusive)
для выбора частичного представления карты, и похоже, что это то, что вам нужно.
NavigableMap<Integer, String> subMap = map.subMap(5, false, 10, false);
Это живое представление карты, которую я создал ранее, но она содержит только сопоставления между ключами 5 и 10, эксклюзивно. Давайте проверим, работает ли это так, как ожидалось:
subMap.forEach(
(k, v) -> System.out.printf("Key: %d, value: '%s'%n", k, v)
);
Выход:
Key: 6, value: '6'
Key: 7, value: '7'
Key: 8, value: '8'
Key: 9, value: '9'
Как видите, карта остается отсортированной, но ограничена указанным диапазоном.
HashMap не может быть отсортирован. Я предполагаю, что у вас есть TreeMap?