У меня есть hashmap<CustomObject,Integer>
, и я хотел бы сравнить целые числа (значения) в каждой записи. Итак, я бы хотел отсортировать мои значения по их Integer
значению в порядке убывания. У меня есть Comparator
, который состоит из следующего ...
class Compare implements Comparator<Integer>{
Map<CustomObject,Integer> map;
/**
* Constructs our map
* @param map map to be sorted.
*/
public Compare(Map<CustomObject,Integer> map){
this.map = map;
}
/**
* Performs the comparison between two entries.
*/
public int compare(Integer one, Integer two){
if(map.get(one) <= map.get(two)){
return 1;
}else{
return 0;
}
}
}
Я передаю свой Hashmap
в TreeMap, вызывая следующую строку кода .. Tmap.putAll(Hmap);
. Где Tmap и Hmap определены как:
private HashMap<CustomObject,Integer> Hmap;
private TreeMap<CustomObject,Integer> Tmap;
Когда я запускаю свой код, я получаю ошибку Exception in thread "main" java.lang.ClassCastException: CustomObject cannot be cast to java.lang.Comparable
.
Исключение, похоже, вызывается, когда я пытаюсь извлечь значение из моего отсортированного списка. вот так ...
TreeMap<CustomObject,Integer> sorted = Tmap.putAll(hmap);
sorted.get(o);
, где o
- это CustomObject.
Я думаю, что неправильно понял, как работает компаратор .. что я делаю не так? Как бы я сравнил два целочисленных значения?
EDIT
Просто чтобы уточнить, что я на самом деле пытаюсь сделать ...
Я хочу сравнить целые числа, которые связаны с CustomObject. Я не могу сделать ключ Integer, потому что эти Integer могут быть не уникальными. Я должен был сравнить их, потому что я хотел бы отсортировать мою коллекцию в порядке убывания на основе их значения Integer.