有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java比较器、集合和哈希映射

我之前需要根据HashMap的值对其进行排序,并将comparator与集合一起使用,如下所示:

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 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)

我的班级。JAVA128:Collections.sort(entries, comparator);
我的班级。JAVA124:return b.getValue().compareTo(a.getValue());

非常感谢你们的帮助,谢谢


共 (2) 个答案

  1. # 1 楼答案

    你有两个选择:

    1. 将排序方法更改为获取Integer,而不是Double

    2. entry.getValue()的返回类型更改为Double

  2. # 2 楼答案

    您将sortMap()方法的签名从Integer改为Double,但仍使用Integer调用它。使用树形图可能是进行隐式排序的一个选项吗