Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для newlam
2 / 2 / 1
Регистрация: 06.05.2013
Сообщений: 34

Сортировка строк в Java 8

19.05.2018, 20:37. Показов 1761. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у нас коллекция из отсортированных строк:
[Кара, Работник, Радуга, Сахара]

Пользователь вводит "ра"
И вначале мы ставим те слова, которые начинаются с "ра" в отсортированном порядке. После них ставим слова, которые содержат "ра", но не начинаются с "ра" тоже в отсортированном порядке.

На выходе должно получиться:
"Работник", "Радуга", "Кара", "Сахара"

Возможно ли с помощью магии Java 8 (стримов) сделать такое?

Вот мой код.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public static void main(String[] args) {
        String val = "ра".toLowerCase();
        List<String> words = Arrays.asList("Кара", "Работник", "Радуга", "Сахара");
        System.out.println(words);
 
        List<String> result = new ArrayList<>();
 
        for (String word : words) {
            System.out.println(val + " ! " + word + " ! " + word.toLowerCase().startsWith(val.toLowerCase()));
            if (word.toLowerCase().startsWith(val))
                result.add(word);
        }
 
        for (String word : words) {
            if (!word.toLowerCase().startsWith(val))
                result.add(word);
        }
 
        System.out.println(result);
    }
Можно ли переписать его на стримах? Как лучше с точки зрения производительности и чистоты кода?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.05.2018, 20:37
Ответы с готовыми решениями:

Java, сортировка строк по алфавиту
Добрый день, у меня есть вопрос как сделать сортировку строк в программе по алфавиту Текст: ..... package Labs; public...

Сортировка в java
Добрый день! Подскажите пожалуйста, есть ли в java код перестановки массива чисел, аналогичный next_permitation в С++ ?

Сортировка в Java
Помогите пожалуйста. Сколько искал по интернету сколько читал но не могу понять как происходит сортировка. Объясните пожалуйста как...

6
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
19.05.2018, 20:54
Лучший ответ Сообщение было отмечено newlam как решение

Решение

Java
1
2
3
        Collections.sort(words,
                Comparator.comparing((String s) -> !s.startsWith("Ра"))
                        .thenComparing(Comparator.naturalOrder()));
1
 Аватар для newlam
2 / 2 / 1
Регистрация: 06.05.2013
Сообщений: 34
19.05.2018, 21:05  [ТС]
А Вы не могли бы объяснить как оно работает? (особенно thenComparing)
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
19.05.2018, 21:13
https://docs.oracle.com/javase... omparator-
Если компаратор считает два элемента равными, то для определения порядка использует другой. Google переводчик.
1
 Аватар для newlam
2 / 2 / 1
Регистрация: 06.05.2013
Сообщений: 34
19.05.2018, 22:54  [ТС]
C thanComparing все понятно, а вот эта запись вызывает недоумение :
Comparator.comparing((String s) -> !s.startsWith("Ра"))

Почему вообще тут true/false? Если равно true, то что тогда?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.05.2018, 23:27
newlam, внимательно прочти вот эти 2 статьи
http://javadevblog.com/polnoe-... ava-8.html
http://javadevblog.com/polnoe-... tream.html
1
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
20.05.2018, 10:42
В чем недоумение?
В определенный момент ты вызываешь метод compare, например compare("Кара", "Работник"). Функцией каждая строка отображается в Boolean, сравниваются Boolean-ы.
!"Работник".startWith("Ра") = false
!"Кара".startWith("Ра") = true
Объяснять не надо, что false в естественном порядке следует перед true, и строка "Работник" здесь будет следовать перед строкой "Кара".
Если попадется случай "Работник", "Радуга" - отображаются на два false, тогда порядок будет установлен компаратором, указанным в thenComparing.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2018, 10:42
Помогаю со студенческими работами здесь

Сортировка в Java
Мне нужна помощь. Мне нужно сделать сортировку, но не получается. Нужно сделать сортировку по убыванию totalTime. Помогите!!! Вот код...

Сортировка Java
Помогите плиз с заданием: считать с файла набор символов (шестнадцятиричные, десятичные числа и просто строка), отсортировать их и записать...

Java Сортировка по алфовиту
Добрый день, подскажите, пожалуйста, у меня не работает функция Zad2, которая отвечает за сортировку по алфавиту, как это можно исправить?...

Сортировка массивов Java
Доброго времени суток. Сейчас перехожу с C# на Java и есть такая задача. Сделать две сортировки int массива и 3 режима: 1) ожидается...

Сортировка ArrayList в Java
Добрый день, мне нужна помощь в реализации следующего метода: public ArrayList&lt;Integer&gt;union(ArrayList&lt;Integer&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru