Ich habe einfach eine einfache Vergleichsmethode, um eine Map
nach der Größe des Wertes zu sortieren, der eine Menge ist.Karte nach Wert sortieren
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;
}
Ich bekomme java.lang.IllegalArgumentException: Comparison method violates its general contract
! Warum?
Mögliches Duplikat von ["Vergleichsmethode verletzt seinen allgemeinen Vertrag!"] (Https://stackoverflow.com/questions/8327514/comparison-method-violates-its-general-contract) – Guy
Fügen Sie ein Beispiel hinzu der Map, die zum Auslösen der Ausnahme führt. – Oleg
Ja bei der Duplizierung. Ich würde vorschlagen, "o2Vals - o1Vals;" zurückzubringen, und es sollte Ihnen gut gehen. – daniu