Java, сортировка списка строк в прямом и обратном порядке

191
18 июля 2021, 00:00

Ести список строк: "Иванов" "Иванкин" "Ивченко" "Лавриенко" "Лавочкин" "Абрамов" "Абдулов" "Акрин" "Циганов"

Их необходимо отсортировать так, что бы начало строки сортировалось по naturalOrder, а оставшаяся часть - в обратном порядке, т.е. отсортированный список должен иметь следующую последовательность: "Акрин" "Абрамов" "Абдулов" "Ивченко" "Иванов" "Иванкин" "Лавриенко" "Лавочкин" "Циганов"

Как я понимаю надо использовать 2 компаратора, но как это реализовать в коде не имею представления.

Answer 1
List<String> strings = Arrays.asList("Иванов", "Иванкин", "Ивченко", "Лавриенко", "Лавочкин", "Абрамов", "Абдулов", "Акрин", "Циганов");
strings.sort((o1, o2) -> {
    int firstCharComparison = o1.charAt(0) - o2.charAt(0);
    int secondCharComparison = -String.CASE_INSENSITIVE_ORDER.compare(o1.substring(1), o2.substring(1));
    return firstCharComparison != 0 ? firstCharComparison : secondCharComparison;
});
System.out.println(strings);

firstCharComparison - сравнение первых символов

secondCharComparison - используем компаратор из стандартной java библиотеки который сравнивает строчки после первого символа. перед ним стоит - так как нам нужен обратный порядок.

Возвращаем по приоритету. Если результат сравнения по первому символу не видит отличий, возвращаем результат по второму. Иначе по первому.

Внимание! Для простоты кода я не включил проверки на null, длину строк и регистр первого символа. Это оставил на вас)

READ ALSO
Проблемы при сборке Maven проекта в IntellijIDea

Проблемы при сборке Maven проекта в IntellijIDea

В intelijiIdea я создал простой java проект на MavenВ папке main -> java создал класс Main, где прописал метод System

265
Как сделать бессмертный сервис?

Как сделать бессмертный сервис?

Есть задача создать файл и проверять есть ли изменения в этом файлеКак это

179
Добавление в StringBuilder символа char

Добавление в StringBuilder символа char

мне необходимо получить случайный символ из двух вариантов (0 или 1)Сделал я это путем получение рандомного инта (48 или 49), т

159
Как поместить иконку на кнопку?

Как поместить иконку на кнопку?

Как правильно добавить иконку на кнопку? Пробовал так:

365