2015-01-08 93 views
0

我正在努力完成以下任務: 我將一個字符和整數(int是特定字符的外觀數)添加到一個LinkedHashMap中(是的,不幸的是我必須使用這個)。根據其值排序LinkedHashMaps

如何打印出訂購者?

LinkedHashMap<Character, Integer> map = new LinkedHashMap(); 
int a=7; 
int b=6; 
int c=9; 
map.put('a', a); 
map.put('b', b); 
map.put('c', c); 

輸出應該是這樣的:

c 9 
a 7 
b 6 
+2

你能解釋一下你試過的嗎?有大量的重複http://stackoverflow.com/questions/12184378/sorting-linkedhashmap – sidgate

+0

你可以在地圖中存儲原始數據類型,我相信你可以只存儲對象。你有包裝類來做到這一點。 – saikumarm

+0

爲什麼'c 9 a 7 b 6'? – xehpuk

回答

0

你可以在地圖轉換爲TreeMap可以進行排序。默認的地圖是由按鍵,在您使用整數,應該對你有足夠的自然順序進行排序...

TreeMap tm = new TreeMap(map); 
+0

這將只在*自然順序*中排序。哪些不是OP要的 – TheLostMind

+0

還有一個TreeMap的構造函數,它使用比較器:TreeMap(比較器比較器)。實現一個將整數降序排列而不是升序的比較器應該很容易。 –

0

如何嘗試這樣,

的方法基於排序地圖值DESC

public static Map<Character, Integer> mapSortedByValues(Map<Character, Integer> map) { 
    List<Map.Entry<Character, Integer>> entryList = new LinkedList<Map.Entry<Character, Integer>>(map.entrySet()); 
    Collections.sort(entryList, 
      new Comparator<Map.Entry<Character, Integer>>() { 
       @Override 
       public int compare(Map.Entry<Character, Integer> e1, Map.Entry<Character, Integer> e2) { 
        return (e1.getValue()).compareTo(e2.getValue()); 
       } 
      } 
    ); 
    Collections.reverse(entryList); //Reverse value DESC 
    Map<Character, Integer> sortedMap = new LinkedHashMap<Character, Integer>(); 
    for (Map.Entry<Character, Integer> entry : entryList) 
     sortedMap.put(entry.getKey(), entry.getValue()); 
    return sortedMap; 
} 

測試值排序;

public static void main(String[] args) { 
    LinkedHashMap<Character, Integer> map = new LinkedHashMap<Character, Integer>(); 
    map.put('a', 7); 
    map.put('b', 9); 
    map.put('c', 6); 

    Map sortedMap = mapSortedByValues(map); 
    System.out.println(sortedMap); 
} 

將輸出

{c=9, a=7, b=6} 
0
  1. 把地圖在列表中。
  2. 對列表排序。
  3. 把列表放回地圖。
  4. 將排序後的地圖留給您的地圖。

下面的代碼

List list =new LinkedList<Map.Entry<String, Integer>>(map.entrySet()); 

Collections.sort(list, (Map.Entry o1, Map.Entry o2) ->{ 
         return (o2.getValue()).compareTo(o1.getValue()) 
       }); 

Map result = new LinkedHashMap<String, Integer>(); 
for (Map.Entry entry : list){ 
    result.put(entry.getKey(), entry.getValue()); 
} 

map = result 
0
map.entrySet().stream() 
    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) 
    .forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue())); 

這顛倒了正常的compareTo使順序顛倒。如果你可以使用自然順序,那麼它就更簡單了:

.sorted(Map.Entry::comparingByValue)