Как хорошо объяснили полигенасыщенные смазки, SortedMap
сортируется по ключу , а не по значению .
Однако, с помощью LinkedHashMap
можно изменить порядок Map
так, как вы хотите. LinkedHashMap
поддерживает порядок вставки, как List
.
Первый шаг - получить пары ключ / значение в структуре сортируемых данных, например, List<Entry<K, V>>
, который вы, в свою очередь, сортируете, используя Collections#sort()
с помощью Compatator<Entry<K, V>>
и, наконец, заполняете им LinkedHashMap
(не HashMap
, иначе вы потеряете порядок снова). 1023 *
Вот базовый пример (оставляя в стороне очевидную обработку исключений во время выполнения):
// Prepare.
Map<String, String> map = new HashMap<String, String>();
map.put("foo", "bar");
map.put("bar", "waa");
map.put("waa", "foo");
System.out.println(map); // My JVM shows {waa=foo, foo=bar, bar=waa}
// Get entries and sort them.
List<Entry<String, String>> entries = new ArrayList<Entry<String, String>>(map.entrySet());
Collections.sort(entries, new Comparator<Entry<String, String>>() {
public int compare(Entry<String, String> e1, Entry<String, String> e2) {
return e1.getValue().compareTo(e2.getValue());
}
});
// Put entries back in an ordered map.
Map<String, String> orderedMap = new LinkedHashMap<String, String>();
for (Entry<String, String> entry : entries) {
orderedMap.put(entry.getKey(), entry.getValue());
}
System.out.println(orderedMap); // {foo=bar, waa=foo, bar=waa}
Само собой разумеется, что это, в конце концов, не правильная структура данных для ваших целей;)