基于LinkedHashMap的值对其进行排序

时间:2015-01-08 09:31:13

标签: java

我正在努力完成以下任务: 我正在向LinkedHashMap添加字符和整数(int是某个字符的出现次数)(是的,不幸的是我必须使用它)。

如何将其打印出来?

 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

4 个答案:

答案 0 :(得分:0)

您可以将地图转换为可以排序的TreeMap。默认映射按键的自然顺序排序,当您使用Integer时,这应该足够了...

TreeMap tm = new TreeMap( map );

答案 1 :(得分: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}

答案 2 :(得分:0)

  1. 将地图放在列表中。
  2. 对列表进行排序。
  3. 将列表放回地图。
  4. 将已排序的地图重新调整为您的地图。
  5. 这是代码

     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
    

答案 3 :(得分:0)

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

这反转了正常的compareTo以使订单反转。如果你可以使用自然顺序,那就更简单了:

.sorted(Map.Entry::comparingByValue)