2012-01-16 113 views
1

可能重複:
How to sort a Map<Key, Value> on the values in Java?在Java中的價值排序地圖

這裏是我的傑作:

ArrayList<Map.Entry<Integer, Integer>> suits = new ArrayList<Map.Entry<Integer, Integer>>(); 
suits.add(new AbstractMap.SimpleEntry(0, 3)); 
suits.add(new AbstractMap.SimpleEntry(1, 5)); 
suits.add(new AbstractMap.SimpleEntry(2, 1)); 
suits.add(new AbstractMap.SimpleEntry(3, 3)); 
Collections.sort(suits, new Comparator<Map.Entry<Integer, Integer>>() { 
    @Override 
    public int compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) { 
    if (e1.getValue() > e2.getValue()) 
     return 1; 
    else if (e1.getValue() < e2.getValue()) 
     return -1; 
    else if (e1.getKey() > e2.getKey()) 
     return 1; 
    else if (e1.getKey() < e2.getKey()) 
     return -1; 
    else 
     return 0; 
    } 
}); 

它的工作原理(至少在簡單的測試情況下,我包括)。它的目的是根據卡片數量(例如3個黑桃,5個心形,5個鑽石,6個球杆)對一張牌進行分類,然後繼續用少量牌(3個黑桃)做西裝。

我已經看到按值排序Map這個問題是一個常見的問題,並且我在理解其他地方提供的一些答案時有點麻煩,因爲我絕對沒有正式的編碼培訓,也沒有Java編程 - 所以我做了我自己的。 在這段代碼中是否有明顯的錯誤?如果它不值得每天使用WTF,那對我來說已經足夠了。

謝謝。

+0

在代碼中沒有什麼是公然錯誤的。但是'Map'不需要做很多事情;你只需要一個鍵值對的List(作爲'Map.Entry'對象),而不是'Map'。 – Jesper

+0

如果您創建自定義類來表示您的卡,您的代碼將更容易閱讀。 – Mitch

回答

1

我建議在您的比較器中使用TreeMap。你是對的,按值排序對於TreeMap來說很難做到。您可以按照Sort a Map<Key, Value> by values (Java)這建議如何按價值排序。