3

ジェネリックマップをソートする次の関数をコンパイルしようとすると、このエラーが発生します。

"The method compareTo(V) is undefined for the type V"

この作品を作るのを手伝ってください!

public class CollectionsPlus<K,V> {

    /**
     * Sort map by value
     * @param map
     * @return
     */
    public static<K,V> Map<K, V> sortMapByValue(Map<K, V> map) {
        List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(
                map.entrySet());
        Collections.sort(list,
                new Comparator<Map.Entry<K, V>>() {
                    public int compare(Map.Entry<K, V> o1,
                            Map.Entry<K, V> o2) {
                        return (o2.getValue().compareTo(o1.getValue()));
                    }
                });

        Map<K, V> result = new LinkedHashMap<K, V>();
        for (Iterator<Map.Entry<K, V>> it = list.iterator(); it.hasNext();) {
            Map.Entry<K, V> entry = it.next();
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }
}
4

1 に答える 1

8

Vを実装する必要がありますComparable。次のように記述して、明示的に要求できます。

public static<K, V extends Comparable<V>> Map<K, V> sortMapByValue(Map<K, V> map)

または、キャストo1.getValue()o2.getValue()てにすることもできますComparable<V>

于 2013-02-17T13:00:02.580 に答える