Порядок списка<String> данных с разделами и единицами

У меня есть List<String> единиц и глав для базовой карточной игры. Я хотел бы упорядочить их от меньшего к большему (например, глава 1, модуль 1, глава 2 и т. д.)

Используя этот код:

String UnitsChaptersString = Utils.GetReviewUnitsChapters().replaceAll(" ", "_");

List<String> UnitsChaptersList = Arrays.asList(UnitsChaptersString.split(","));

for (int i = 0; i < UnitsChaptersList.size(); i++) {

    // Order and add to the RecyclerView here...

}

Я получаю и перебираю список модулей и глав.

Пример значения String, возвращаемого Utils.GetReviewUnitsChapters()..., таков:

Chapter_3,Unit_2,Chapter_1

Со строкой выше конечный результат должен быть: Chapter_1,Chapter_3,Unit_2.

Для ясности, Unit_2 больше как Chapter_1 , так и Chapter_3, но Unit_1 больше только Chapter_1.

Важное примечание: юниты «удерживают» главы! Главы являются дочерней компанией Units.

Визуальное дерево:

Раздел 1:

  • Глава 1

  • Глава 2

  • И т. д...

Модуль 2:

  • Глава 5

  • Глава 6

  • И так далее.

У меня был тот же вопрос для Swift (Устранить ошибки массива .sorted Swift 5). Обратите внимание, что в Swift есть хорошая функция .sorted(). Может ли быть один для Java?

StackOverflow пытался отправить меня по этой ссылке, но это не был ответ на мой вопрос.

Я также рассматривал вариант List.sort(...), но столкнулся со стеной Comparators и super Strings, поэтому не смог реализовать это самостоятельно.

Обновлять:

Используя один из предложенных методов, я использовал этот код:

List<String> TestList = Arrays.asList("Chapter_1", "Unit_3", "Chapter_42", "Chapter_2");

        Collections.sort(TestList);

        for (int i = 0; i < TestList.size(); i++) {

            Log.i("SortedList", TestList.get(i));

        }

И получил это:

I/SortedList: Chapter_1
I/SortedList: Chapter_2
I/SortedList: Chapter_42
I/SortedList: Unit_3

Unit_3 должно быть после Chapter_2, но перед Chapter_42.

Другими словами, вывод должен быть:

I/SortedList: Chapter_1
I/SortedList: Chapter_2
I/SortedList: Unit_3
I/SortedList: Chapter_42

Спасибо!

Похоже, что глава состоит из юнитов, причем юниты не уникальны для разных глав. Я бы предположил, что плоский список не является правильным способом моделирования этих данных. И при этом не обязательно полагаться напрямую на String. Возможно, вам следует создать собственные классы с этим (например, класс Chapter, у которого есть список Unit).

Slaw 02.04.2023 22:08

@Slaw, нет, мои «главы» не состоят из юнитов. И, поскольку мои данные на самом деле не нуждаются в модели, я не хочу идти по этому пути.

Ars_Codicis 02.04.2023 22:17

Если вы хотите остаться со списком, эта ссылка может быть весьма полезной. В противном случае я бы пошел с подходом Slaw.

Cryptolis 02.04.2023 22:17

@vincere Ну, судя по вашему редактированию, я в основном просто понял это неправильно. Блок состоит из глав. И, учитывая вашу древовидную структуру, я по-прежнему считаю, что моделирование ваших данных с помощью классов — правильный подход. Позже, если вам действительно нужен плоский список, вы можете добавить эту функциональность (взять дерево и сгладить его; если главы расположены по порядку и единицы каждой главы расположены по порядку, то плоский список будет в порядке). Несмотря ни на что, нужно как-то зафиксировать принадлежность главы к юниту или, может быть, дать всему последовательные идентификаторы (в правильном порядке).

Slaw 03.04.2023 00:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Лучший способ решить эту проблему, вероятно, состоит не в том, чтобы хранить эти данные в виде строк, а в виде фактической структуры данных.

Если вы застряли со строками, используйте сортировку с пользовательским компаратором, который решает, что будет первым на основе ваших критериев (для чего потребуется разбить эту строку на число и тип, а затем сравнить сначала число, а затем тип).

Спасибо! Это был мой последний вариант, и, думаю, я приступлю к работе.

Ars_Codicis 02.04.2023 23:05

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