2012-12-14 22 views
-1

可能重複:
How to sort a Map<Key, Value> on the values in Java?排序樹圖

我有一個treemap<Integer,Float>。我怎樣才能在浮點數上對地圖進行排序?

有沒有什麼快捷方式?或者我必須爲地圖編寫比較器?

+1

@OP:注意重複問題的接受答案的注意事項。有一種解決方案無效的方法。 –

回答

4

實際上,您無法(正確,可靠地)按值排序Map實現。 (你可能會看到聲明的實現是駭人的,不可靠的,並且非常奇怪地表現 - 拒絕重複值,在嘗試查看不在映射中的鍵時拋出異常,如果支持映射更改,則獲得不可恢復的損壞...)

相反,明確排序的條目列表:

List<Map.Entry<Integer, Float>> list = new ArrayList<>(map.entrySet()); 
Collections.sort(list, new Comparator<Map.Entry<Integer, Float>>() { 
    public int compare(Map.Entry<Integer, Float> e1, Map.Entry<Integer, Float> e2){ 
    return e1.getValue().compareTo(e2.getValue()); 
    } 
}); 

如果你喜歡,然後你可以把這個變成一個LinkedHashMap

Map<Integer, Float> sortedMap = new LinkedHashMap<Integer, Float>(); 
for (Map.Entry<Integer, Float> entry : list) { 
    sortedMap.put(entry.getKey(), entry.getValue()); 
} 
+0

我依賴於OP所要求的 - 原始地圖保持未排序(與值相關)。 – assylias

+2

正如我在我的回答中所說的那樣,沒有可靠的實施可以這樣做。 –

+0

謝謝,這給了我們很好的解決方案。 – Willmore