[英]comparator for Map.Entry<K,V>
我有一个地图,其中枚举类型为键,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)
。 我无法解决这个问题。 任何帮助都非常感谢。 提前致谢。
你可能想要这个:
// 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>
的T
类型。
注意, V
必须扩展Comparable<V>
,以便能够在o1.getValue()
上调用compareTo()
o1.getValue()
。
您现在可以使用上述ScoreComparator
:
new ScoreComparator<String, String>();
new ScoreComparator<Long, Integer>();
// etc...
请注意,从您当前的实现中,您可能甚至不需要K
参数。 替代:
class ScoreComparator<V extends Comparable<V>>
implements Comparator<Map.Entry<?, V>> {
public int compare(Map.Entry<?, V> o1, Map.Entry<?, V> o2) {
// Call compareTo() on V, which is known to be a Comparable<V>
return o1.getValue().compareTo(o2.getValue());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.