hashmap<CustomObject,Integer>
があります。各エントリ内のIntegers(値)を比較したいと思います。だから、基本的に私の値を降順で値をInteger
でソートしたいのですが。私は、次の要素で構成さComparator
...HashMapをオブジェクトと比較する
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;
}
}
}
が、私は次のコード行... Tmap.putAll(Hmap);
を呼び出すことで、私のHashmap
のTreeMapに渡すんです。私は私のコードを実行すると、私はエラーを取得しException in thread "main" java.lang.ClassCastException: CustomObject cannot be cast to java.lang.Comparable
private HashMap<CustomObject,Integer> Hmap;
private TreeMap<CustomObject,Integer> Tmap;
:TMAPとHMAPは以下のように定義されている場合。
ソートされたリストから値を抽出しようとしたときに例外が発生したようです。そうですね...
TreeMap<CustomObject,Integer> sorted = Tmap.putAll(hmap);
sorted.get(o);
o
はCustomObjectです。
私は比較器の仕組みを誤解していると思います。私は間違っていますか? 2つの整数値をどのように比較すればよいですか?ちょうど私が実際に何をしようとしている明確にする
EDIT
...
私はCustomObjectにリンクされている整数を比較したいです。これらの整数は一意ではない可能性があるため、鍵を整数にすることはできません。私は彼らの整数値に基づいて降順で私のコレクションを並べ替えたいので、それらを比較することでした。
例外がスローされるコードはどこですか? – SJuan76
問題は、マップ用のコンパレータが値ではなくキーを比較することです。私はあなたの問題を解決するために逆マップを行うことはできません。その後、その結果をLinkedHashMapに挿入します。 – fge
@ SJuan76それを反映するようにコードを更新しました – Skizit