Как получить все значения ключа, лежащие между двумя заданными ключами в отсортированной хэш-карте? - PullRequest
0 голосов
/ 29 мая 2019

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

1 Ответ

1 голос
/ 30 мая 2019

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

Выход:

Ключ: 6, значение: '6'
Ключ: 7, значение: «7»
Ключ: 8, значение: «8»
Ключ: 9, значение: '9'

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

...