java - 使用 ValueComparator 按值对 Map<Integer, Float> 进行排序会在 Java 8 中出错

标签 java sorting dictionary

我已经声明了这样一个 map :

Map<Integer, Float> errorMap = new HashMap<> ();

然后填充它。最后,我必须按值(value)对其进行排序。我写了这个:

ValueComparator vc = new ValueComparator(errorMap);
TreeMap<Integer, Float> sortedMap = new TreeMap<> (vc);
sortedMap.putAll(errorMap);

ValueComparator 类是这样的:

class ValueComparator implements Comparator<Float> {
    Map<Integer, Float> map;

    public ValueComparator(Map<Integer, Float> base) {
        this.map = base;
    }


    public int compare(Float a, Float b) {
        if(map.get(a) <= map.get(b))
            return -1;
        else
            return 1;

    }

}

问题是当我编译这段代码时,它给了我这个错误:

incompatible types: cannot infer type arguments for TreeMap<>
    reason: inference variable K has incompatible bounds
      equality constraints: Integer
      upper bounds: Float,Object
  where K is a type-variable:
    K extends Object declared in class TreeMap

任何人都可以建议如何处理这个问题。我正在使用 Java 8。

最佳答案

在 map 声明中,

TreeMap< Integer, Float> sortedMap = new TreeMap<> (vc);

键值是 Integer 类型,但是在 compare() 方法中获取值时,您使用 Float 值作为键。因此,将 a 和 b 的类型更改为“Integer”。它应该可以正常工作。

关于java - 使用 ValueComparator 按值对 Map<Integer, Float> 进行排序会在 Java 8 中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782769/

相关文章:

java - 打开跟踪文件时出错。没有那个文件或目录 [2]

java - Spring 5 安全 OAuth2 登录重定向循环

javascript - 为什么 Angular orderBy 自定义比较器不起作用?

java - 通过接口(interface)导入 map key

java - 求解有限域上的线性方程组 python 或 java

java - 如何检查 Jackson Deserializer 中是否设置了可注入(inject)值

c++ - 如何正确有效地执行基于尺寸项目网格的排序?

arrays - 为什么归并排序算法需要将数组一分为二后再进行排序?

python - Pandas Columns to Flattened Dictionary(而不是字典列表)

python - python中根据字典值删除数组项