【发布时间】:2013-03-29 23:13:05
【问题描述】:
我之前需要按其值对 HashMap 进行排序,我将比较器与集合一起使用,如下所示:
private LinkedHashMap<String, Integer> sortMap(Map<String, Integer> results, int count)
{
List<Map.Entry<String, Integer>> entries = new ArrayList<Map.Entry<String, Integer>>(results.entrySet());
Comparator<Entry<String, Integer>> comparator = new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> a, Entry<String, Integer> b) {
return b.getValue().compareTo(a.getValue());
}
};
Collections.sort(entries, comparator);
LinkedHashMap<String, Integer> sorted = new LinkedHashMap<String, Integer>();
for (Entry<String, Integer> entry : entries)
sorted.put(entry.getKey(), entry.getValue());
return sorted;
}
现在情况发生了变化,我需要它是一个已排序的 HashMap。所以我把代码改成这样:
private LinkedHashMap<String, Double> sortMap(Map<String, Double> results, int count)
{
List<Map.Entry<String, Double>> entries = new ArrayList<Map.Entry<String, Double>>(results.entrySet());
Comparator<Entry<String, Double>> comparator = new Comparator<Entry<String, Double>>() {
@Override
public int compare(Entry<String, Double> a, Entry<String, Double> b) {
return b.getValue().compareTo(a.getValue());
}
};
Collections.sort(entries, comparator);
LinkedHashMap<String, Double> sorted = new LinkedHashMap<String, Double>();
for (Entry<String, Double> entry : entries)
sorted.put(entry.getKey(), entry.getValue());
return sorted;
}
它会抛出一个错误,即java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double at:
at myPackage.myClass$1.compare(myClass.java:124)
at myPackage.myClass$1.compare(myClass.java:1)
at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at myPackage.myClass.sortMap(myClass.java:128)
myClass.java.128 : Collections.sort(entries, comparator);
myClass.java.124 : return b.getValue().compareTo(a.getValue());
如果你们能提供任何帮助,我们将不胜感激,谢谢!
【问题讨论】:
-
尝试做一个干净的构建,看看你是否遇到同样的错误。发生此错误是因为它接收的值类型为
Integer而不是Double。