2017-03-01 119 views
1

所以我遇到了這種方法,它能夠按值分類HashMaps。反向排序HashMap?

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { 
     return map.entrySet() 
       .stream() 
       .sorted(Map.Entry.comparingByValue()) 
       .collect(Collectors.toMap(
         Map.Entry::getKey, 
         Map.Entry::getValue, 
         (e1, e2) -> e1, 
         LinkedHashMap::new 
         )); 
    } 

我想用在Comparatorreversed()方法,但我似乎無法找到把它放在正確的地方。

+0

http://stackoverflow.com/a/28607267/616460 –

+0

@JornVernee不起作用 –

+0

「沒有按沒有工作「? 「不起作用」如何? –

回答

4

reversed()方法應調用ComparatorcomparingByValue()返回。 Java的類型推斷打破了這裏,不幸的是,所以你必須指定泛型類型:

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue 
    (Map<K, V> map) { 

    return map.entrySet() 
      .stream() 
      .sorted(Map.Entry.<K, V> comparingByValue().reversed()) 
      // Type here -----^ reversed() here -------^ 
      .collect(Collectors.toMap(
        Map.Entry::getKey, 
        Map.Entry::getValue, 
        (e1, e2) -> e1, 
        LinkedHashMap::new 
      )); 
} 
+3

@BenArnao這就是爲什麼在你的問題中包含你所嘗試的內容以及明確描述爲什麼你嘗試過的方法沒有奏效的原因。 –

+1

謝謝,這是我需要的。我試着在那個地方使用reverse(),但它不起作用,因爲我必須指定類型。 –