Не отсортировывать массив строк по алфавиту

Мне нужно создать панель навигации с расширяемым списком, поэтому я написал этот код для создания своего меню:

            Map<String, List<String>> lstChild;
            List<String> lstTitle;

            List<String> title = Arrays.asList("Social", "Collaborazione", "Web", "Squadre");
            List<String> childSquadre = Arrays.asList("U13", "U16", "U18");
            List<String> childSocial = Arrays.asList("FB", "Instagram", "Linkedin");

            lstChild = new TreeMap<String, List<String>>();
            lstChild.put(title.get(0), childSquadre);
            lstChild.put(title.get(1), childSocial);

            lstTitle = new ArrayList<String>(lstChild.keySet());

Последний lstTitle сортируется по алфавиту, даже если я добавляю каждый элемент в нужном мне порядке, а именно: Social, Collaborazione, Web, Squadre.

Итак, как мне отсортировать массив lstTitle по алфавиту?

keySet()-метод возвращает ключи в порядке возрастания. Это в алфавитном порядке для строк. Так что он делает именно то, что от него ожидается. Если вам нужно другое поведение, не используйте метод keySet().

Ben 20.06.2018 12:01

Где используется lstChild?

Eselfar 20.06.2018 12:15

@Eselfar используется в последней строке

img.simone 20.06.2018 13:13

Да, но я думаю, это будет использовано и позже?

Eselfar 20.06.2018 13:13

Неа. Только в эту часть кода

Simone 20.06.2018 13:19

Я не понимаю. Зачем тогда нужно создавать TreeMap? Просто используйте title как lstTitle

Eselfar 20.06.2018 13:28

Для чего? Я не понимаю. Моя последняя цель - создать расширяемое меню. Могу ли я создать TreeMap для объединения всех списков массивов

Simone 20.06.2018 13:34

Я спросил, где используется lstChild, и вы ответили: only into this part of code. В предоставленном вами коде lstChild на самом деле не используется, поскольку конечный результат в lstTitle такой же, как если бы был выполнен lstTitle = new ArrayList<>(title);.

Eselfar 20.06.2018 13:53

Ммм, мне нужно попробовать. Я дам Вам знать

Simone 20.06.2018 14:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

lstChild = new TreeMap<String, List<String>>();

Класс TreeMap реализует интерфейс Map, аналогичный классу HashMap.

Основное различие между ними заключается в том, что HashMap - это неупорядоченная коллекция, а TreeMap сортируется в порядке возрастания его ключей.

Так что замените свой TreeMap на HashMap

Проблема действительно в TreeMap, но HashMap не является решением: This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.источник

Eselfar 20.06.2018 12:12

Если я использую HashMap, я получаю то, что хочу. Но @Eselfar, что посоветуете делать?

Simone 20.06.2018 13:19

Я не думаю, что то, что сказал @Eselfar, полностью правильно, обратитесь к этому geeksforgeeks.org/…

Akshay Katariya 20.06.2018 13:40

Какая часть страницы, на которую вы ссылаетесь, противоречит тому, что я сказал? Согласно вашему документу, лучше использовать LinkedHashMap, поскольку «ключи упорядочены по порядку их вставки». я согласен

Eselfar 20.06.2018 13:49

Спасибо @Eselfar LinkedHashMap, это лучшее решение

Simone 20.06.2018 14:11
Ответ принят как подходящий

Итак, наконец, используйте:

lstChild = new LinkedHashMap <String, List<String>>();

Другие вопросы по теме