Я пытаюсь сортировать карту на основе различных возможных значений в объекте 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;
}
Если вы хотите для сравнения 'Student', ваша реализация' Comparator' должна использовать 'Student' как параметр типа, а не' Integer' ... ('Integer' уже реализует' Comparable') –
Также см. [этот вопрос] (http: //stackoverflow.com/questions/2864840/treemap-sort-by-value). –
Спасибо за быстрый ответ. Я не понимаю, почему я бы использовал ученика вместо ключа. Пытаясь попробовать, что вы сказали, я столкнулся с проблемой. Конструктор TreeMap (Comparator ) undefined Map sortedMap = new TreeMap (valueComparator); –
urbill