2016-09-26 72 views
1

我有一個字符串地圖的字符串,我想排序地圖根據他的價值爲凱F,但我的代碼沒有這樣做。請指教。比較價值的基礎上的關鍵在地圖列表

Map<String, String> h = null; 
    Map<String, String> h1 = null; 
    Map<String, String> h2 = null; 
    listSummaryMap = new ArrayList<Map<String, String>>(); 

    h = new HashMap<String, String>(); 
    h.put("SUCCESS", "27"); 
    h.put("TOTAL_HOTELS", "86"); 
    h.put("F", "86"); 
    h.put("RESERVATION_MODE", "86"); 
    h.put("PARTNER_NAME", "86"); 

    h1 = new HashMap<String, String>(); 
    h1.put("SUCCESS", "27"); 
    h1.put("TOTAL_HOTELS", "86"); 
    h1.put("F", "36"); 
    h1.put("RESERVATION_MODE", "86"); 
    h1.put("PARTNER_NAME", "86"); 

    h2 = new HashMap<String, String>(); 
    h2.put("SUCCESS", "27"); 
    h2.put("TOTAL_HOTELS", "86"); 
    h2.put("F", "28"); 
    h2.put("RESERVATION_MODE", "86"); 
    h2.put("PARTNER_NAME", "86"); 

    listSummaryMap .add(h); 
    listSummaryMap .add(h1); 
    listSummaryMap .add(h2); 


    Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() { 
     @Override 
     public int compare(Map<String, String> o1, Map<String, String> o2) { 
      return o2.get("F").compareTo(o1.get("F")); 
     } 
    }); 
+0

'Collections.addAll(listSummaryMap,H,H1,H2);'創建的所有地圖之後。 –

+0

謝謝Jekin Kalariya,Eran,每個人 – nostalgiaguy

回答

2

轉換的String s到Integer S和比較作爲Integer S:

public int compare(Map<String, String> o1, Map<String, String> o2) { 
     return Integer.valueOf(o2.get("F")).compareTo(Integer.valueOf(o1.get("F"))); 
    } 

這是假設該"F"關鍵是在Map總是存在,並且其值可以總是被解析到一個Integer

順便說一句,我沒有看到你在哪裏添加Map s到listSummaryMap。你忘了在你的問題中包含該代碼嗎?

0

需要首先將字符串轉換爲整數然後比較才能像這樣工作。

Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() { 
      @Override 
      public int compare(Map<String, String> o1, Map<String, String> o2) { 
       Integer a=Integer.parseInt(o2.get("F")); 
       Integer b=Integer.parseInt(o1.get("F")); 
       return b.compareTo(a); 
      } 
     }); 
0

您忘了將地圖添加到列表中,並且地圖h3從不初始化。這拆分了你的代碼已經可以工作,但是將地圖從最高的ID分類到最低的。如果您將比較線更改爲:

Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() { 
    @Override 
    public int compare(Map<String, String> o1, Map<String, String> o2) { 
     return o1.get("F").compareTo(o2.get("F")); 
    } 
}); 

然後它會按「F」從最低值到最高值對您的地圖進行排序。

希望它可以幫助