2013-03-14 54 views
1

我有一個圖是這樣的:如何排序映射不是通過鍵而是值類的字段?

Map<String, TC> mapToSort= new HashMap<String, TC>(); 

值是一個類:

class TC { 

    private int a; 

    public TC(int a) { 
     this.a = a; 

    } 
//getters-setters 
    public int getA() { 
     return a; 
    } 
    public void setA(int a) { 
     this.a = a; 
    }  
} 

我想不是由按鍵對此映射進行排序(這將是很容易使用TreeMap中),但由TC類中的字段「a」變量。因此具有最高「a」值的元素應位於mapToSort之上。 有沒有內置或其他優雅的解決方案來實現這一目標?

+0

如果你不使用鑰匙進行排序/搜索,你可能要重新考慮你的數據結構。使用'Set'將很容易解決你的目的。 – 2013-03-14 11:15:59

+0

http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – Aerus 2013-03-14 11:17:25

+0

http://stackoverflow.com/questions/2864840/treemap-sort逐值 – Mikhail 2013-03-14 11:25:18

回答

0

落實類可比,然後把它們放在一個TreeSet

class TC implements Comparable<TC> { 

    private int a; 

    public TC(int a) { 
     this.a = a; 
    } 
//getters-setters 
    public int getA() { 
     return a; 
    } 
    public void setA(int a) { 
     this.a = a; 
    } 

    @Override 
    public int compareTo(TC tc){ 
     return this.a-tc.getA();  
    } 
} 
0

使用一個TreeMap與按鍵自定義比較。在關鍵對象中保留一個指向值對象的鏈接。實現你的比較器,按值進行比較,而不是按鍵。在你的情況下,你必須用類似的東西包裝一個字符串:

class Key{ 
    public Key(String key, TC value) 
    { 
     this.key = key; 
     this.value = value; 
    } 
    String key; 
    TC value; 
} 
0

這樣的事情會得到一個值的排序列表。

List sortValues(Map mapToSort) 
{ 
    List values = new ArrayList(mapToSort.values()); 
    Comparator<TC> tcComparator = new Comparator<TC> 
    { 
    public int compare(TC tc1, TC tc2) 
    { 
     return tc1.getA() - tc2.getA(); 
    } 
    }; 
    Collections.sort(values, tcComparator); 
    return values; 
} 
相關問題