Могу ли я преобразовать список строк в одну строку, используя потоки Java 8?

Я написал код ниже, используя java.

List<String> list = new ArrayList<String>();
list.add("book1");
list.add("book2");
list.add("book3");
list.add("book4");


String combined = "";

for(int i=0;i<list.size();i++) {
    combined = combined + (i+1)+ ". "+list.get(i)+" \r\n";
}

System.out.println(combined);

ВЫХОД

1. book1 
2. book2 
3. book3 
4. book4 

Как я могу написать этот код, используя streams. Я попробовал сделать ниже:

String combined2 = "";

List<String> list2 = IntStream.range(0, list.size()).mapToObj(i->i+1+". "+list.get(i)+" \r\n").toList();


for(String s:list2) {
    combined2 = combined2+s;
}

System.out.println(combined2);

Но я не хочу использовать здесь цикл for. Как я могу улучшить свой подход?

Здесь хорошо подойдет предварительная версия Java 22 Gatherer, позволяющая избежать необходимости использовать IntStream.

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

Ответы 1

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

Вы почти там. Вам просто нужно использовать Stream.collect.

Вот модифицированный код.

String list2 = IntStream.range(0, list.size())
        .mapToObj(i-> i+1 + ". " + list.get(i))
        .collect(Collectors.joining(System.lineSeparator()));

выход:

1. book1
2. book2
3. book3
4. book4

Обратите внимание, что в отличие от оригинала, здесь не добавляется разделитель строк в конце строки (который может быть, а может и не быть тем, что на самом деле желательно). Обязательно добавьте его вручную, если желательно, чтобы строка находилась в конце, а не только между элементами: .collect([...]) + System.lineSeparator().

M. Justin 01.07.2024 18:16

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

Похожие вопросы

Ошибка при чтении файла, используемого двумя отдельными процессами Java
Bean-компонент типа «org.springframework.security.crypto.password.PasswordEncoder», который не удалось найти
Общий метод для преобразования List<CustomObject> в Chunk<CustomObject>
Проблема Spring Security с JWT: невозможно создать подкласс финального класса JwtAuthenticationProvider
Java АОrollPane не будет изменять размер ниже минимального размера JButton с текстом
Где скачать eclipse IDE (есть две основные ссылки, и все они совершенно разные установщики)
Издевающийся объект, вызываемый в лямбда-выражении, вызванный из издевающегося объекта
Почему BFS работает намного быстрее, чем DFS, когда я реализую их оба?
Шаблон проектирования интерфейса для классов.... Кто-нибудь использует шаблон проектирования интерфейса для классов?
Запуск4j | «Для этого приложения требуется среда выполнения Java». при открытии .exe это файл .jre, преобразованный в .exe