Sortieren einer TreeMap nach Wert
Einführung:
In einer TreeMap werden Elemente sortiert basierend auf ihrer natürlichen Reihenfolge, bei der es sich je nach Implementierung um Schlüssel oder Werte handeln kann. Es ist jedoch möglich, eine TreeMap anhand der Werte ihrer Einträge mithilfe eines Komparators zu sortieren.
Lösung:
Sie können eine TreeMap nicht direkt nach ihren Werten sortieren. Die Syntax, die Sie mit dem byValue-Komparator versucht haben, ist falsch.
Sie können jedoch die gewünschte Funktionalität erreichen, indem Sie ein benutzerdefiniertes SortedSet erstellen, das die Einträge der TreeMap enthält. Dieses SortedSet kann mit der Methode „entrySortedByValues()“ erstellt werden:
static <K,V extends Comparable<? super V>> SortedSet<Map.Entry<K,V>> entriesSortedByValues(Map<K,V> map) { SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<>( new Comparator<Map.Entry<K,V>>() { @Override public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) { int res = e1.getValue().compareTo(e2.getValue()); return res != 0 ? res : 1; } } ); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
Diese Methode nimmt eine Map, deren Werte vergleichbar sind, und gibt ein SortedSet von Map.Entry zurück, sortiert nach den Werten der Einträge.
So verwenden Sie diese Methode:
Map<String, Integer> map = new TreeMap<>(); map.put("A", 3); map.put("B", 2); map.put("C", 1); System.out.println(map); // prints "{A=3, B=2, C=1}" SortedSet<Map.Entry<String,Integer>> sortedEntries = entriesSortedByValues(map); System.out.println(sortedEntries); // prints "[C=1, B=2, A=3]"
Hinweis zur Ganzzahl Gleichheit:
Beim Vergleich von Ganzzahlwerten mit == wird auf Referenzgleichheit und nicht auf Wertgleichheit geprüft. Es wird empfohlen, die Methode equal() zu verwenden, um Ganzzahlwerte auf Gleichheit zu vergleichen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine TreeMap nach ihren Werten in Java sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!