我已经声明了这样一个 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/