2013-07-24 122 views
-1

我有一個包含hashmaps和幾個鍵/值對的數組列表。其中一個鍵/值對包含鍵「Order」,值爲int。我如何根據它包含的hashmaps的「Order」鍵來排列數組列表? (我能做到這一點的一個字符串值,但不是一個int值),我能想到的使用int值對散列表進行ArrayList排序

回答

4

像這樣的事情會做到這一點:

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

Collections.sort(list, new Comparator<Map<String, Integer>>() { 

    final static String COMPARE_KEY = "Order"; 

    @Override 
    public int compare(Map<String, Integer> lhs, Map<String, Integer> rhs) { 
    Integer v1 = lhs.get(COMPARE_KEY); 
    Integer v2 = rhs.get(COMPARE_KEY); 
    return v1 < v2 ? -1 : v1 > v2 ? 1 : 0; 
    } 
}); 
0

一種方法是保持HashMap一些自定義類的屬性,並創建ListList<CustomClass>。然後,您可以讓您的CustomClass執行Comparable或具有Comparator進行此自定義排序。在這種情況下排序會更容易。

或定義一個Comparator比較兩個Map對象並在Collections.sort()中使用它。

public class MyCustomComparator implements Comparator<Map <String, Integer>> 
{ 
    @Override 
    public int compare (Map<String, Integer> o1, Map<String, Integer> o2) 
    { 
    return o1.get("Order").compareTo(o2.get("Order"));  
    } 
} 
-1

需要自定義比較像這樣:

public class MyComparator implements Comparator<HashMap<String, ?>> { 
    public compare(HashMap<String, ?> o1, HashMap<String, ?> o2) { 
     return o1.get("Order").toString().compareTo(o2.get("Order").toString()); 
    } 
} 

你再排序您使用清單:

Collections.sort(myList, new MyComparator()); 
+0

@Downvoter,請評論 – njzk2

相關問題