尝试对值为对象的地图进行排序,并且可以按对象中的多个值进行排序

时间:2015-04-08 02:27:34

标签: java sorting dictionary

我尝试根据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;
}

1 个答案:

答案 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.