Как отсортировать MultiMap <k, v> в Java? - PullRequest
8 голосов
/ 05 ноября 2008

Есть ли причина сортировать MultiMap в Java и как это сделать?

Ответы [ 3 ]

1 голос
/ 07 ноября 2008

На самом деле я не знаю, почему вы хотите отсортировать карту. Карта - это словарь, и вы извлекаете из этого словаря (или в случае нескольких карт набор) интересующих вас значений.

В случае MultiMap вы, возможно, захотите отсортировать коллекцию, полученную в результате получения. Но какое преимущество у вас есть у отсортированной Карты, поскольку она ничего не ускоряет при поиске определенного значения?

1 голос
/ 07 ноября 2008

Если вы говорите о org.apache.commons.collections.MultiMap, то вы не можете; поскольку он возвращает Collection, а не List, он не поддерживает концепцию порядка.

Если вы говорите о org.apache.commons.collections.MultiHashMap, то все, что вам нужно сделать, - это перебрать ключи, взять возвращенный ArrayList и отсортировать его, используя Collections.sort().

Предполагается, что вы используете эту реализацию, хотя .

Ничто не мешает вам реализовать свой собственный MultiMap довольно легко, который поддерживает сортировку списков. Это может быть так просто, как HashMap<K, Collection<V>>, я не знаком с тем, как работает MultiMaps.

0 голосов
/ 18 октября 2016

Самое простое решение - использовать TreeMultimap из гуавы. Используйте либо напрямую

TreeMultimap<...> sortedMap = TreeMultimap.create(notSortedMultiMap);

, если ваши ключи и значения можно сортировать естественным образом (реализовать Comparable), или

TreeMultimap<...> sortedMap = TreeMultimap.create(keyComparator, valueComparator);
sortedMap.putAll(notSortedMultiMap);

, если вам нужно предоставить пользовательские компараторы.

Если вы знаете, что вам нужно его отсортировать, и вам не нужна скорость поиска, вы, конечно, можете использовать TreeMap с самого начала.

Затем вы можете перебирать TreeMap или использовать что-то вроде values ​​() или записи, чтобы получить отсортированную коллекцию.

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