我有一个带有枚举类型的Map作为键,Double带有值。我想根据Double值对此进行排序。所以我得到了入口集,并希望将Collections.sort()
与比较器一起使用。我有比较器的以下代码
class ScoreComparator<Map.Entry<K, V>> implements Comparator<Map.Entry<K, V>> {
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
我收到以下错误消息
Syntax error on token ".", extends expected (line 1)
。The type parameter Map is hiding the type Map<K,V> (line 1)
。我无法解决此问题。任何帮助都非常感谢。提前谢谢。
答案 0 :(得分:8)
你可能想要这个:
// Declare K and V as generic type parameters to ScoreComparator
class ScoreComparator<K, V extends Comparable<V>>
// Let your class implement Comparator<T>, binding Map.Entry<K, V> to T
implements Comparator<Map.Entry<K, V>> {
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
// Call compareTo() on V, which is known to be a Comparable<V>
return o1.getValue().compareTo(o2.getValue());
}
}
ScoreComparator
有两个泛型类型参数K
和V
。 Map.Entry<K, V>
不是有效的泛型类型定义,但您可以使用它来绑定Comparator<T>
的{{1}}类型。
请注意,T
必须延长V
,才能在Comparable<V>
上致电compareTo()
。
您现在可以使用上述o1.getValue()
:
ScoreComparator
注意,从您当前的实现中,您可能甚至不需要new ScoreComparator<String, String>();
new ScoreComparator<Long, Integer>();
// etc...
参数。另一种选择:
K