Как я могу отсортировать карту с помощью строкового ключа?нравится (1 фу, 2 фу) - PullRequest
0 голосов
/ 13 декабря 2018

'Я использую hibernate, я планировал использовать LinkedHashMap для сортировки элементов, но это не работает, потому что я не мог инициализировать как так, поэтому я делаю сортировку из контроллера, так что это работает, но неа также, это мой метод сортировки.

public LinkedHashMap<String, Indicador> OrdenarMap(Map<String, Indicador> map) {

        LinkedHashMap<String, Indicador> sortedMap = new LinkedHashMap<>();

        map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByKey())
                .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));

        return sortedMap;
    }

These are my keys the sort its correct but...

Я хочу такой заказ

{1 Objetivo General, 1.1 Objetivo Especifico, 2 ObjetivoОбщее} и т. Д.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Используйте TreeMap с пользовательским Компаратором .

По умолчанию, String Comparator сравнивает строки лексикографически, и именно поэтому вы видите такой порядок{"1", "10", "11", ..., "2", "20"}.

Поскольку я предполагаю, что ваш ключ всегда будет двойным, этот компаратор должен работать:

TreeMap<String, Indicador> sortedMap = new TreeMap<>(new Comparator<String>() {
    public int compare(String string1, String string2) {
        return Double.parseDouble(string1) - Double.parseDouble(string2) < 0.0 ? -1 : 1;
    }
});
0 голосов
/ 13 декабря 2018

Посмотрите на TreeMap.Сортирует по естественному порядку ключей

Красно-черная реализация NavigableMap на основе дерева.Карта сортируется в соответствии с естественным порядком ее ключей или с помощью компаратора, предоставляемого во время создания карты, в зависимости от того, какой конструктор используется.

https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html

Конструктортакже можно использовать компаратор для ключей, чтобы выполнить собственную сортировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...