2017-03-01 9 views
1

So stieß ich auf diese Methode, die HashMaps nach Wert sortieren kann.HashMap in umgekehrter Reihenfolge sortieren?

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 
         )); 
    } 

Ich mag die reversed() Methode auf den Comparator verwenden, aber ich kann nicht scheinen, den richtigen Platz zu finden, sie zu setzen.

+0

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

+0

@JornVernee die nicht –

+0

funktioniert „doesn nicht arbeiten? "Geht nicht" wie? –

Antwort

4

Die reversed() Methode sollte auf die Comparator aufgerufen werden, die von comparingByValue() zurückgegeben wird. Java Typinferenz bricht hier unten, leider, so dass Sie die generischen Typen angeben müssen werden:

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 Aus genau diesem Grund ist es im Allgemeinen eine gute Idee, das, was Sie in Ihrer Frage versucht haben, einzuschließen, sowie klare Beschreibungen, warum das, was Sie versucht haben, nicht funktioniert hat. –

+1

Danke, das ist was ich brauchte. Ich habe versucht, reversed() an dieser Stelle, aber es hat nicht funktioniert, weil ich den Typ angeben musste. –

Verwandte Themen