2015-10-05 72 views
1

我想通過使用JDK 8樣式函數對值進行排序。雖然我得到了排序部分,但我不確定如何在TreeMap中收集結果。有人可以解釋如何在聲明式風格中完成這件事嗎?我需要收集到另一個Map<String, String>Java 8 - 按值分類映射並收集結果

Map<String, String> map = new HashMap<>(); 
    map.put("John", "time3"); 
    map.put("Henry", "time6"); 
    map.put("Smith", "time1"); 
    map.put("Rock", "time2"); 
    map.put("Ryan", "time5"); 
    map.put("Gosling", "time4"); 

    map.entrySet().stream() 
      .sorted(Map.Entry.<String, String>comparingByValue().reversed()) 
      ; 
+0

收集到'TreeMap'中是毫無意義的,因爲它不會保留排序順序,而是會自己按鍵排序。您將需要收集到保存映射順序的映射,如「LinkedHashMap」。請參見[如何在Java流中按降序對值排序LinkedHashMap?](http://stackoverflow.com/q/29860667/3920048)。 – Misha

+0

謝謝@misha。我能夠使用LinkedHashMap解決它。 – MFIhsan

回答

0

雖然有幾個類似的問題,但我明確想要將結果存儲在Map中。這是解決方案。

Map<String, String> sortedMap = map.entrySet().stream() 
      .sorted(Map.Entry.<String, String>comparingByValue().reversed()) 
      .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v2, LinkedHashMap::new));