Map.Entry的比较器<k,v> </k,v>

时间:2013-06-20 10:28:11

标签: java map comparator

我有一个带有枚举类型的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());
    }   
}

我收到以下错误消息

  1. Syntax error on token ".", extends expected (line 1)
  2. The type parameter Map is hiding the type Map<K,V> (line 1)
  3. 由于上述两个错误,K和V无法解析为某种类型(第3,4行)。
  4. 我无法解决此问题。任何帮助都非常感谢。提前谢谢。

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有两个泛型类型参数KVMap.Entry<K, V>不是有效的泛型类型定义,但您可以使用它来绑定Comparator<T>的{​​{1}}类型。

请注意,T必须延长V,才能在Comparable<V>上致电compareTo()

您现在可以使用上述o1.getValue()

ScoreComparator

注意,从您当前的实现中,您可能甚至不需要new ScoreComparator<String, String>(); new ScoreComparator<Long, Integer>(); // etc... 参数。另一种选择:

K