簡體   English   中英

Map.Entry的比較器<K,V>

[英]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());
    }   
}

我收到以下錯誤消息

  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行)。

我無法解決這個問題。 任何幫助都非常感謝。 提前致謝。

你可能想要這個:

// 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采用兩個泛型類型參數KV 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM