Как отсортировать treemap на основе его значений?

Некоторые ароматы regex могут на самом деле соответствовать вложенным скобкам (например, Perl совместимые). Однако я видел regex, который утверждает, что правильно соответствовал RFC 822, и это были две страницы текста без любого пробела. Поэтому лучший способ обнаружить адрес действующего адреса электронной почты состоит в том, чтобы послать электронное письмо ему и видеть, работает ли это.

14
задан Click Upvote 19 September 2009 в 11:24
поделиться

6 ответов

Вы не можете, так как компаратор TreeMap работает только с ключами, например, см. Этот конструктор .

В любом случае, вы можете использовать несколько коллекций, используйте TreeMap (или скорее HashMap) для поиска элементов по ключам, и иметь SortedSet для перебора значений.

15
ответ дан 1 December 2019 в 06:07
поделиться

Google Guava предоставляет TreeMultiMap .

Вы также можете использовать две коллекции. Что вы пытаетесь достичь? Вы можете объяснить свои варианты использования?

6
ответ дан 1 December 2019 в 06:07
поделиться

Поменять местами значения и ключи

А если серьезно, пожалуйста, укажите в контексте, чего вы хотите достичь. Может быть, достаточно отсортировать после завершения другой обработки.

0
ответ дан 1 December 2019 в 06:07
поделиться

Вы можете попробовать дать компаратор, который сравнивает значения вместо ключей при создании TreeMap.

    final TreeMap<Integer,String> tree = new TreeMap<Integer,String>();
    tree.put(1, "1");
    tree.put(2, "2");
    tree.put(3, "3");
    tree.put(4, "4");

    final TreeMap<Integer,String> treeSortedByValues = new TreeMap<Integer,String>(new Comparator<Integer>()
    {
        public int compare(Integer o1, Integer o2)
        {
            return tree.get(o1).compareTo(tree.get(o2));
        }
    });
    treeSortedByValues.putAll(tree);

    for ( Entry<Integer, String> e : treeSortedByValues.entrySet() )
    {
        System.out.println(e.getKey() + ": " + e.getValue());
    }
1
ответ дан 1 December 2019 в 06:07
поделиться

Коллекции Apache Commons имеют TreeBidiMap :

Этот класс гарантирует, что отображение будет в порядке возрастания клавиш и в порядке возрастания значений, отсортировано в соответствии с естественным порядком для классы ключей и значений.

Здесь есть порт для Java5-generics здесь .

5
ответ дан 1 December 2019 в 06:07
поделиться

Вот решение:

public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
    Comparator<K> valueComparator =  new Comparator<K>() {
        public int compare(K k1, K k2) {
            int compare = map.get(k2).compareTo(map.get(k1));
            if (compare == 0) return 1;
            else return compare;
        }
    };
    Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
    sortedByValues.putAll(map);
    return sortedByValues;
}

Обратите внимание, что карта отсортирована от наибольшего значения до самого низкого.

24
ответ дан 1 December 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: