2015-10-05 61 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));