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

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

19.05.2018, 20:37. Показов 1740. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru