2016-09-26 1 views
1

J'ai une carte de chaîne à la chaîne, et je veux trier les cartes sur la base de leur valeur pour le kay F, mais mon code ne parvient pas à le faire. s'il vous plaît donnez votre avis.comparaison de la valeur sur la base de la clé dans la liste des cartes

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);' après toutes les cartes sont créées. –

+0

Merci Jekin Kalariya, Eran, tout le monde – nostalgiaguy

Répondre

2

Convertir les String s à Integer s et comparer comme 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"))); 
    } 

Cela suppose la clé "F" est toujours présent dans les Map s, et sa valeur peut toujours être analysé à un Integer.

BTW, je ne vois pas où vous ajoutez les Map à listSummaryMap. Avez-vous oublié d'inclure ce code dans votre question?

0

Vous devez d'abord convertir String en nombre entier, puis comparer.

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

Vous avez oublié d'ajouter les cartes à votre liste et la carte h3 est jamais initialisés. Cela démonté votre code fonctionne déjà tel quel mais trie les cartes de l'ID le plus élevé au plus bas. Si vous changez votre ligne de comparaison à celle:

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")); 
    } 
}); 

Ensuite, il triera vos cartes par « F » de la plus faible à la valeur la plus élevée.

Hope it helps