private static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue(Map<K, V> map)
{
Map<K, V> result = new LinkedHashMap<>();
Stream<Map.Entry<K, V>> st = map.entrySet().stream();
st.sorted(Map.Entry.comparingByValue())
.forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
return result;
}
Dies ist ein Beispiel aus this post. Es klappt. Das Problem ist, dass es in aufsteigender Reihenfolge sortiert. Wie kann ich es in absteigend ändern?Karte in absteigender Reihenfolge sortieren java8
Ich kann das tun, wie folgt:
public static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue(Map<K, V> map)
{
List<Map.Entry<K, V>> list =
new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>()
{
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2)
{
return (o2.getValue()).compareTo(o1.getValue());//change o1 with o2
}
});
Map<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list)
{
result.put(entry.getKey(), entry.getValue());
}
return result;
}
ich tun kann, dass ich diese Linie durch Ändern Ordnung: return (o2.getValue()).compareTo(o1.getValue());
Aber ich würde mit Lambda ausdr ausprobieren.
bevor wir das beantworten, [was hast du versucht, selbst] (/ help/how-to-ask)? Wo hast du nach der Antwort gesucht, woran hast du gedacht, hast du die Dokumentation für die API-Aufrufe, die du in diesem Code siehst, nachgeschlagen? –
Übrigens, verwenden Sie '.forEach/.forEachOrdered' nicht, um Einträge zur Karte hinzuzufügen, verwenden Sie stattdessen" Collect "mit' Collectors.toMap'. –