如何按降序按值对HashMap进行排序

时间:2016-05-02 15:44:44

标签: sorting hashmap

我有这个代码,但它按值按升序排序hashMap,我想按降序对HashMap进行排序。

public  Map<String, Float> sortByValue(Map<String, Float> map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
     public int compare(Object o1, Object o2) {
          return ((Comparable) ((Map.Entry) (o1)).getValue())
         .compareTo(((Map.Entry) (o2)).getValue());
     }
});

   Map result = new LinkedHashMap();
   for (Iterator it = list.iterator(); it.hasNext();) {
       Map.Entry entry = (Map.Entry)it.next();
       result.put(entry.getKey(), entry.getValue());
   }

   return result;
} 

例如我的哈希映射:

  

(&#34; word&#34;,0.7),(&#34; word2&#34;,1.0)

我希望得到如下命令:

  

(&#34; word2&#34;,1.0),(&#34; word,0.7&#34;)

1 个答案:

答案 0 :(得分:0)

您可以通过反转compareTo - 方法的结果来反转顺序。

 public int compare(Object o1, Object o2) {
      return ((Comparable) ((Map.Entry) (o1)).getValue())
     .compareTo(((Map.Entry) (o2)).getValue());
 }

会改为

 public int compare(Object o1, Object o2) {
      return -((Comparable) ((Map.Entry) (o1)).getValue())
     .compareTo(((Map.Entry) (o2)).getValue());
 }

这将1变为-1,反之亦然,导致颠倒顺序。