2013-07-24 7 views
-1

J'ai une liste qui contient des hashmaps avec plusieurs paires clé/valeur. L'une des paires clé/valeur contient la clé "Order" et la valeur est un int. Comment puis-je trier l'arraylist selon la clé "Order" des hashmaps qu'il contient s'il vous plait? (Je peux le faire pour une valeur de chaîne, mais pas une valeur int)Trier ArrayList avec hashmap avec des valeurs int

Répondre

4

Quelque chose comme ça le ferait:

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

Une façon je peux penser est de garder l'HashMap comme un attribut d'une classe personnalisée et créer le List comme List<CustomClass>. Vous pouvez ensuite laisser votre CustomClass implémenter Comparable ou avoir un Comparator pour ce tri personnalisé. Il sera plus facile de trier dans ce cas.

Ou définir un Comparator qui compare deux objets Map et l'utiliser dans 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

Vous avez besoin d'un comparateur personnalisé comme celui-ci:

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

vous puis trier votre liste à l'aide:

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

@Downvoter, s'il vous plaît commenter – njzk2