2013-10-08 28 views
1
map = new LinkedHashMap<String, String>(); 
list = new ArrayList<HashMap<String, String>>(); 

map.put("id", id); 
map.put("amt", amt); 

list.add(map); 

如何按照amt的升序排列列表。我無法做到這一點。 我非常感謝任何幫助。sort arraylist with keycending

我正在添加id,amt循環。如何用鑰匙排序爲amt

id=1,2,3,4,5 
amt=1000,33333,77,9087,5432 
+1

請更確切地說明您確切需要什麼。我不能讓你的問題陳述的頭或尾 – Prateek

+2

應該是相同的http://stackoverflow.com/questions/922528/how-to-sort-map-values-by-key-in-java 希望它有幫助 –

+0

你好Prateek.Its for循環的值 - > id和數量如上所示,並將其添加到arraylist - >列表中。我想按照數量的升序對數組進行排序,並獲得相應的ID爲同樣的感謝你的時間。 – jason

回答

3

只需使用TreeMap

Map<String, String> map = new TreeMap<String, String>(); 
List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 

map.put("id", "id"); 
map.put("amd", "amd"); 

list.add(map); 

System.out.println(list); 

輸出:

[{amd=amd, id=id}] 

現在,如果Id的是大寫和amd較低的情況,那麼你應該重寫默認行爲TreeMap在構造函數中使用Comparator(以確保字符串鍵的排列是正確的):

Map<String, String> map = new TreeMap<String, String>(new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      return o1.toLowerCase().compareTo(o2.toLowerCase()); 
     } 
    }); 

Look to the TreeMap API Documentation

+0

你在哪裏指定要完成的排序,而不是id? – jason

+0

我也有 \t \t map = new LinkedHashMap ();和list = new ArrayList >(); – jason

+1

@jason字符串按字典順序排序,因爲在我之前出現的字符在id之前。 – arynaq

0

你的問題不是很清楚,在某些時候,你似乎提排序列表中只有一個元素(你的地圖)。但是我假設你想要對該地圖中的按鍵進行排序(無論是在地圖中還是將它們全部添加到某個列表中後)。

但是,對於排序列表,您可以依靠自然順序(如果元素實施Comparable)或自定義Comparator來獲得Collections.sort()。另外,如果您希望在添加/刪除元素時維護訂單,則可以查看SortedSet(和TreeSet實現)。

維護與命令鍵地圖,你有SortMap(有一個顯着的實現:TreeMap),這將確保它保存在任何時刻的順序 - 你可以隨意添加的元素,每當你重複你按順序獲取鑰匙。訂單將再次成爲自然訂單(由Comparable.compareTo提供),或者您可以通過實施Comparator接口來提供自定義訂購。