我尝试根据Student对象中的不同可能值对地图进行排序。这似乎并不适合我,我似乎无法弄清楚原因。任何帮助将非常感激。谢谢!
protected static Map<Integer, Student> sort(Map<Integer, Student> unsorterMap, String field)
{
Comparator<Integer> valueComparator =
new Comparator<Integer>()
{
public int compare(Integer k1, Integer k2)
{
int compare;
if(field.equalsIgnoreCase("name"))
{
compare = unsorterMap.get(k1).getName().compareTo(unsorterMap.get(k2).getName());
}
else
{
compare = Integer.compare(unsorterMap.get(k1).getIndex(), unsorterMap.get(k2).getIndex());
}
if (compare == 0)
return 1;
else
return compare;
}
};
Map<Integer, Student> sortedMap = new TreeMap <Integer, Student>(valueComparator);
sortedMap.putAll(unsorterMap);
return sortedMap;
}
答案 0 :(得分:0)
您的比较器违反了Comparator
合同。来自javadoc:
实现者必须确保所有x和y的sgn(compare(x,y))== -sgn(compare(y,x))
但是在你的代码中,你有
if (compare == 0)
return 1;
else
return compare;
如果两名学生对您用于比较的字段具有相同的值,则compare(x,y)
和compare(y,x)
都将返回1.