I just have a simple compare method to sort a Map
by the size of value which is a set.
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;
}
I get java.lang.IllegalArgumentException: Comparison method violates its general contract
! Why so?