2013-02-17 5 views
3

지도 :자바 제네릭 : 정렬 나는이 오류가 일반적인지도를 정렬 다음과 같은 기능을 컴파일하려고 값

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

이 작품을 만들기 위해 도와주세요! VComparable을 구현

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; 
    } 
} 

답변

6

는 당신이 필요합니다. 명시 적으로 작성하여 필요할 수 있습니다 :

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

다른 방법으로, Comparable<V>o1.getValue()o2.getValue()을 시전 할 수 있습니다.

+0

매력처럼 작동합니다. 감사합니다. @assylias! –

+0

최상의 결과를 얻으려면'V extends Comparable ' – newacct

+0

을 사용하십시오. 자바가 괜찮은 타입의 시스템을 가질 때? 내 평생은 아니지만 나는 두려워합니다. –