【发布时间】:2018-03-10 18:47:14
【问题描述】:
我正在制作一个自定义刺激器以在 SortedMap 中使用,其中键是字符串,值是该字符串被读取次数的计数。 当我运行它时,我得到这个错误:
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());
}
}
【问题讨论】:
-
错误在哪一行?
-
您不能用
Comparator<Map.Entry<String, Integer>>创建TreeMap<String, Integer>。它期待一个Comparator<String>。如果您没有使用原始类型,您可能会在new TreeMap<>(mapCompare)发现错误。 -
您真的需要地图进行查找,还是只需要键/值对的有序序列?
-
@shmosel 我需要地图进行查找,错误出现在我的比较器声明第 3 行
标签: java string casting maps comparator