Как получить все ключевые значения между двумя заданными ключами в отсортированной хэш-карте?

У меня есть HashMap со временем в качестве ключа. Я отсортировал HashMap. Теперь я хочу получить все значения ключей между двумя ключами, то есть значениями времени.

HashMap не может быть отсортирован. Я предполагаю, что у вас есть TreeMap?

Sean Patrick Floyd 29.05.2019 20:51

Отфильтруйте те, которые "до" минимальные и "после" максимальные данные. С какими трудностями вы сталкиваетесь при этом?

Pshemo 29.05.2019 20:51

Как упомянул @SeanPatrickFloyd, нет такой вещи, как сортировка HashMap. А TreeSet, который отсортирован по является, имеет для этого встроенный метод

Ivan 29.05.2019 20:57

Что вы пробовали? Что пошло не так ? Приведите пример ввода/вывода?

Paul Lemarchand 29.05.2019 21:04

Вы имеете в виду связанную хеш-карту?

ifly6 29.05.2019 21:06

Да, карта дерева @SeanPatrickFloyd

Mann Baraiya 29.05.2019 21:09

HashMap — это не TreeMap. Используйте опцию редактировать, чтобы уточнить свой вопрос.

Pshemo 29.05.2019 21:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
581
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот пример кода. 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'

Как видите, карта остается отсортированной, но ограничена указанным диапазоном.

Другие вопросы по теме