Итерация по HashMap по значениям - PullRequest
0 голосов
/ 22 января 2011

Мне нужно перебрать HashMap, но, чтобы придать значение порядку значений.Например, рассмотрим следующую карту хеширования <String, Integer>:

{"dog" : 2, "bird": 3, "cat" : 1}

Теперь мне нужно перебрать карту hasp в порядке возрастания значений, чтобы

for () {
 System.out.println( currentKey );
}

всегда выводит

"кошка", "собака", "птица"

Ответы [ 4 ]

4 голосов
/ 22 января 2011

Может быть, это поможет:

Сортировать картупо значениям (Java)

4 голосов
/ 22 января 2011

Что ж, вас может заинтересовать использование TreeMap , которое сортирует ваши записи по ключу.

В противном случае вас может заинтересовать Map.keySet (), Map.entrySet (), или Map.values ​​() .

Если вы все еще хотите сохранить свою карту в виде HashMap, вы можете использовать одиниз Коллекции 'многочисленные функции для получения отсортированных коллекций (например, вы можете получить отсортированную версию вашей карты, отсортировать список и т. д.).

Поскольку я вижу, что вы конкретно хотите отсортировать по значениям, я думаю, Michał Minicki ответ должен быть таким, как вы хотите.

1 голос
/ 22 января 2011

Другой пример использования Гуава :

Плюсы:

  • Возвращает записи (не только ключи)
  • Не требует, чтобы ключи были Comparable

static <K, V>Set<Map.Entry<V, K>>
entriesByValue(Map<K, V> source, Comparator<V> cmp) {
    SortedMap<V, Collection<K>> inverseMap = Maps.newTreeMap(cmp);
    Supplier<Set<K>> setFactory = new Supplier<Set<K>>() {
        public Set<K> get() {
            return Sets.newHashSet();
        }
    };
    SetMultimap<V, K> inverseMM =
        Multimaps.newSetMultimap(inverseMap, setFactory);
    Multimaps.invertFrom(Multimaps.forMap(source), inverseMM);
    return Collections.unmodifiableSet(inverseMM.entries());
}
1 голос
/ 22 января 2011

Если вы хотите, чтобы карта вставлялась сама по значению при вставке записей, возможно, самый простой способ - использовать что-то вроде TreeMultimap в библиотеке коллекций Google.

Если вывсе еще хотите использовать hashmap, но при сортировке значений из набора они сортируются, тогда вы можете использовать два подхода - либо вы можете получить значения с помощью метода values ​​(), а затем запустить Collections.sort () в возвращаемом спискеили вы можете снова использовать класс, такой как TreeMultimap, добавив все записи в текущем хэш-файле, а затем перечислив их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...