2017-03-01 85 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(),但它不起作用,因为我必须指定类型。 –