2016-09-26 9 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

Integer SにString Sを変換しInteger sと比較:これは"F"キーは常にMapの中に存在し、その値は常にANに解析することができると仮定される

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

Integer

ところで、Mapをどこに追加するのかわかりません。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から最低の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"でマップをソートします。すべてのマップが作成された後、 `;

は、それが

関連する問題