Сортировка Java TreeMap по значению в обратном порядке: методы и примеры

Чтобы отсортировать Java TreeMap по значению в обратном порядке, вы можете использовать следующие методы:

Метод 1: использование компаратора
Один из способов добиться этого — создать собственный компаратор, который сравнивает значения записей TreeMap в обратном порядке. Вот пример:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        // Create a TreeMap with Integer keys and String values
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        // Add some entries to the TreeMap
        treeMap.put(1, "Apple");
        treeMap.put(2, "Banana");
        treeMap.put(3, "Orange");
        treeMap.put(4, "Mango");
        // Create a custom Comparator to compare values in reverse order
        Comparator<Integer> valueComparator = (k1, k2) -> treeMap.get(k2).compareTo(treeMap.get(k1));
        // Create a TreeMap sorted by values in reverse order using the custom Comparator
        TreeMap<Integer, String> sortedTreeMap = new TreeMap<>(valueComparator);
        sortedTreeMap.putAll(treeMap);
        // Print the sorted TreeMap
        for (Map.Entry<Integer, String> entry : sortedTreeMap.entrySet()) {
            System.out.println(entry.getKey() + " => " + entry.getValue());
        }
    }
}

Метод 2: использование потоков Java 8
Другой подход заключается в использовании потоков Java 8 для сортировки записей на основе их значений в обратном порядке. Вот пример:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        // Create a TreeMap with Integer keys and String values
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        // Add some entries to the TreeMap
        treeMap.put(1, "Apple");
        treeMap.put(2, "Banana");
        treeMap.put(3, "Orange");
        treeMap.put(4, "Mango");
        // Sort the entries by values in reverse order using Java 8 Streams
        List<Map.Entry<Integer, String>> sortedEntries = new ArrayList<>(treeMap.entrySet());
        Collections.sort(sortedEntries, Comparator.comparing(Map.Entry::getValue, Comparator.reverseOrder()));
        // Create a new TreeMap to store the sorted entries
        TreeMap<Integer, String> sortedTreeMap = new TreeMap<>();
        // Put the sorted entries into the new TreeMap
        for (Map.Entry<Integer, String> entry : sortedEntries) {
            sortedTreeMap.put(entry.getKey(), entry.getValue());
        }
// Print the sorted TreeMap
        for (Map.Entry<Integer, String> entry : sortedTreeMap.entrySet()) {
            System.out.println(entry.getKey() + " => " + entry.getValue());
        }
    }
}