2013-04-15 42 views
0

我想排序我的HasMap ArrayList,所以我的列表視圖按值排序,但我沒有得到它。 基本上我有幾個按鍵,其中之一是「類型」持有像"1", "4", "3",....排序整數作爲字符串的HashMap <String,String>

我想這個關鍵的「類型」命令列表值,但我得到"1", "11", "2",而不是"1", "2", "11" ...

我想這個代碼對它進行排序:

Collections.sort(myList, new Comparator<HashMap<String, String>>() { 
public int compare(HashMap<String, 
String> mapping1,HashMap<String, String> mapping2) { 
return mapping1.get("type").compareTo(mapping2.get("type")); 
    } 
}); 
+0

爲什麼你使用'String'作爲鍵,當你純粹用它來存儲'ints'? – anotherdave

+0

那裏有更多的鍵沒有ints。當我嘗試將該鍵更改爲int時,在我的map.put(key,value)上得到一個錯誤 – bond

+0

在這種情況下,要小心NumberFormatException會被接受的答案拋出 - 您需要擴展該邏輯以適應您的有效String鍵。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#valueOf(java.lang.String) – anotherdave

回答

5

你的類型是String而這就是爲什麼你得到"1", "11", "2"Integer.parseInt值。將該字符串轉換爲整數(Integer.valueOf()),然後進行比較。以下

mapping1.get("type").compareTo(mapping2.get("type")); 

Integer.valueOf(mapping1.get("type")).compareTo(Integer.valueOf(mapping2.get("type"))); 

變化:我沒有編譯上面的代碼。

+0

謝謝。有效。 – bond

1

數據類型的「類型」似乎String。因此排序"1", "11", "2"似乎正確。更改「類型」的數據類型Integer

OR

compare方法比較「類型」

0

如果像上面提到的那樣,您需要處理比較器中的非整數值,您希望有一個StringInteger鍵的混合。

Collections.sort(myList, new Comparator<HashMap<String, String>>() { 
    public int compare(HashMap<String, String> mapping1, 
         HashMap<String, String> mapping2) { 
     String valueOne = mapping1.get("type"); 
     String valueTwo = mapping2.get("type"); 
     try { 
      return Integer.valueOf(valueOne).compareTo(Integer.valueOf(valueTwo)); 
     } catch(NumberFormatException e) { 
      return valueOne.compareTo(valueTwo); 
     } 
    } 
}); 

(否則,將鍵值改爲Integer,以避免其他開發人員的錯誤。)

0

你可以如下做到..

改變參數根據自己的需要..

Set<Entry<String, Integer>> set = map.entrySet(); 
     List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set); 
     Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() 
     { 
      public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) 
      { 
       return (o2.getValue()).compareTo(o1.getValue()); 
      } 
     }); 
     for(Map.Entry<String, Integer> entry:list){ 
      System.out.println(entry.getKey()+" ==== "+entry.getValue()); 
     } 
相關問題