Je viens d'avoir une méthode de comparaison simple pour trier un Map
par la taille de la valeur qui est un ensemble.Trier la carte par la taille de la valeur
public List<Entry<String, HashSet<String>>> orderByDescStringSetSize(HashMap<String, HashSet<String>> map){
Set<Entry<String, HashSet<String>>> set = map.entrySet();
List<Entry<String, HashSet<String>>> list = new ArrayList<Entry<String, HashSet<String>>>(set);
Collections.sort(list, new Comparator<Map.Entry<String, HashSet<String>>>(){
public int compare(Map.Entry<String, HashSet<String>> o1, Map.Entry<String, HashSet<String>> o2){
Integer o1Vals = o1.getValue().size();
Integer o2Vals = o2.getValue().size();
//descending
if(o2Vals > o1Vals)
return 1;
else if(o2Vals==o1Vals)
return 0;
else
return -1;
}
});
return list;
}
J'obtiens java.lang.IllegalArgumentException: Comparison method violates its general contract
! Pourquoi ça?
Possibilité de duplication de ["La méthode de comparaison enfreint son contrat général!"] (Https://stackoverflow.com/questions/8327514/comparison-method-violates-its-general-contract) – Guy
Ajouter un exemple de la carte qui provoque l'apparition de l'exception. – Oleg
Oui sur la duplication. Je suggère un 'return o2Vals - o1Vals;' et vous devriez aller bien. – daniu