2015-01-08 6 views
0

Я боюсь o следующей задачи: Я добавляю символы и целые числа (int - количество аргументов определенного символа) в LinkedHashMap (да, к сожалению, мне нужно использовать это).Сортировка LinkedHashMaps на основе его значения

Как я могу распечатать его заказчиком?

LinkedHashMap<Character, Integer> map = new LinkedHashMap(); 
int a=7; 
int b=6; 
int c=9; 
map.put('a', a); 
map.put('b', b); 
map.put('c', c); 

Вывод должен выглядеть следующим образом:

c 9 
a 7 
b 6 
+2

Не могли бы вы объяснить, что вы пробовали? Есть тонны дубликатов http://stackoverflow.com/questions/12184378/sorting-linkedhashmap – sidgate

+0

Можете ли вы хранить примитивные типы данных в Картах, я считаю, что вы можете хранить только объекты. у вас есть классы-оболочки для этого. – saikumarm

+0

Почему 'c 9 a 7 b 6'? – xehpuk

ответ

0

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

TreeMap tm = new TreeMap(map); 
+0

Это будет сортировать только в * Естественном порядке *. Это не то, что хочет OP – TheLostMind

+0

Существует также конструктор TreeMap, который принимает компаратор: TreeMap (компаратор компаратор). Реализация компаратора, который сортирует целые числа, спускающиеся вместо восхождения, должен быть достаточно простым. –

0

Как попробовать, как это,

метод сортировка Карты на основе Значение DESC

public static Map<Character, Integer> mapSortedByValues(Map<Character, Integer> map) { 
    List<Map.Entry<Character, Integer>> entryList = new LinkedList<Map.Entry<Character, Integer>>(map.entrySet()); 
    Collections.sort(entryList, 
      new Comparator<Map.Entry<Character, Integer>>() { 
       @Override 
       public int compare(Map.Entry<Character, Integer> e1, Map.Entry<Character, Integer> e2) { 
        return (e1.getValue()).compareTo(e2.getValue()); 
       } 
      } 
    ); 
    Collections.reverse(entryList); //Reverse value DESC 
    Map<Character, Integer> sortedMap = new LinkedHashMap<Character, Integer>(); 
    for (Map.Entry<Character, Integer> entry : entryList) 
     sortedMap.put(entry.getKey(), entry.getValue()); 
    return sortedMap; 
} 

Оценка стоимости сортировки;

public static void main(String[] args) { 
    LinkedHashMap<Character, Integer> map = new LinkedHashMap<Character, Integer>(); 
    map.put('a', 7); 
    map.put('b', 9); 
    map.put('c', 6); 

    Map sortedMap = mapSortedByValues(map); 
    System.out.println(sortedMap); 
} 

Выведет

{c=9, a=7, b=6} 
0
  1. Поместите карту в списке.
  2. Сортировка списка.
  3. Верните этот список на карту.
  4. Отмените отсортированную карту на карте.

Вот код

List list =new LinkedList<Map.Entry<String, Integer>>(map.entrySet()); 

Collections.sort(list, (Map.Entry o1, Map.Entry o2) ->{ 
         return (o2.getValue()).compareTo(o1.getValue()) 
       }); 

Map result = new LinkedHashMap<String, Integer>(); 
for (Map.Entry entry : list){ 
    result.put(entry.getKey(), entry.getValue()); 
} 

map = result 
0
map.entrySet().stream() 
    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) 
    .forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue())); 

Это меняет нормальный СотрагеТо сделать заказ обратного. Если вы можете использовать естественный порядок, то это немного проще:

.sorted(Map.Entry::comparingByValue) 
Смежные вопросы