2017-09-28 10 views
0

私は、キーが文字列であり、値がその文字列が何回読み取られたのかを示すソートマップで使用するカスタムイライザを作成しています。 私はそれを実行すると、私はこのエラーを取得:Javaマップエントリの文字列キャスティングの問題

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map$Entry at comp2402a1.Part8$1.compare(Part8.java:21)

私は、この鋳造エラーを取得しています理由を把握するように見えることはできません。誰でも助けてくれれば幸いです。

は、ここに私のコードです:

public static void doIt(BufferedReader r, PrintWriter w) throws IOException { 
//Custom comparator 
Comparator<Map.Entry<String, Integer>> mapCompare = new Comparator<Map.Entry<String, Integer>>(){ 
    @Override 
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { 
    if (o1.getValue()-o2.getValue() != 0){ 
     return o1.getValue()-o2.getValue(); 
    } else { 
     return o1.getKey().compareTo(o2.getKey()); 
    } 
    } 
}; 

//Read lines into a HashMap & count instance #s 
HashMap<String, Integer> hMap = new HashMap(); 
for (String line = r.readLine(); line != null; line = r.readLine()) { 
    if (hMap.get(line)==null) { 
    hMap.put(line,1); 
    w.println("1"); 
    } else { 
    hMap.put(line, hMap.get(line)+1); 
    } 
} 

//Put objects into sorted map w/custom sort and output 
SortedMap<String, Integer> sMap = new TreeMap(mapCompare); 
sMap.putAll(hMap); 
for (Map.Entry<String, Integer> e : sMap.entrySet()){ 
    w.println(e.getKey()); 
} 

}

+0

エラーの原因は次のうちどれですか? – shmosel

+0

'Comparator > 'で' TreeMap 'を作成することはできません。それは 'Comparator 'を期待しています。未処理の型を使用していない場合は、 'new TreeMap <>(mapCompare)'でエラーをキャッチした可能性があります。 – shmosel

+0

実際にルックアップのためのマップが必要ですか、またはキー/値ペアの順序付きシーケンスが必要ですか? – shmosel

答えて

0

私はタイプComparator<Map.Entry<String, Integer>>代わりのComparator<String>のコンパレータを作成していたため、エラーが表示されていました。

まず、HashMapでMap.entrySet()を呼び出し、それをリストに入れ、ソートしてからSortedMapをベースにして修正しました。

+0

あなたのマップをどのようにリストから外したのか不思議です。あなたのコードを共有できますか? – shmosel

関連する問題