2013-02-11 81 views
0
List<Map<String,String>> consolidErr = new LinkedList<Map<String,String>>(); 

Map m1= new HashMap<String,String>(); 
m1.put("id","1"); 
m1.put("value","value1"); 

Map m2= new HashMap<String,String>(); 
m2.put("id","2"); 
m2.put("value","value2"); 

Map m3= new HashMap<String,String>(); 
m3.put("id","3"); 
m3.put("value","value3"); 

add all m1,m3 and m2 in list 

然後根據地圖中的ID對地圖進行排序現在我想要列表中的地圖爲m1,m2和m3。如何在java列表中對列表中的地圖進行排序

現在我想根據地圖中的ids進行排序,我使用list的迭代進行排序,並將map的第一個id保留爲checker,並與next進行比較,如果有其他更好的方法比使用內置方法methods.?請給你的ideas.am使用泡沫排序現在。

+0

使用'Collections.sort' – 2013-02-11 04:48:56

+0

@RohitJain感謝答覆,但在此基礎上地圖的對象也將被分揀ID或地圖的價值? – sunleo 2013-02-11 04:50:43

+0

搜索'id'鍵,並獲得它的價值。 – 2013-02-11 04:52:47

回答

4

在java做這種最簡單的方式(或至少,用最少的混亂)是使用自定義的比較。

這個想法是,如果你有一個天然排序(任何擴展比較)的對象,你可以要求排序,例如,

Collections.sort(List<Integer> .. 

否則你可以通過在描述你想怎麼對象相比,你想要的任何自定義邏輯,例如一個比較(約 - 這是從我的頭頂,沒有錯誤檢查,但應該足以讓你的想法) -

List<Map<String,String>> consolidErr = ... 
enter code here 
Collections.sort(consolidErr, new Comparator<Map<String,String>>(){ 
    public int compare(Map<String,String> a, Map<String,String> b){ 
     return a.get("id").compareTo(b.get("id"));} 
    }) 
+0

完美的解決方案謝謝它的工作原理......... – sunleo 2013-02-11 05:03:25

0

我會使用,而不是PriorityQueue

爲一個包裝爲您的清單。通過在創建時向構造函數提供Comparator,可以向您保證,在每次將新元素插入列表後,您的列表將保持排序。

1

在Java 8中,我們可以在一行中對的maps進行排序。

list.sort(Comparator.comparing((Map<String,String> mp) -> mp.get("Id"))); 
相關問題