Преобразование вложенного списка с использованием java Streams

Можно ли получить тот же результат (как я сейчас получаю со следующими вложенными циклами for), используя Stream?

List<String> people = Arrays.asList("John", "Adam");
List<String> dogs = Arrays.asList("alex", "rex");

List<List<String>> list = new ArrayList<List<String>>();
list.add(people);
list.add(dogs);

List<List<String>> list2 = new ArrayList<List<String>>();
for (int i = 0; i < list.size(); i++) {
    list2.add(new ArrayList<>());
    for (int j = 0; j < list.get(i).size(); j++) {
        list2.get(i).add(list.get(i).get(j).toUpperCase());
    }
}
System.out.println(list2);

Я хотел бы получить что-то вроде этого в ответ:

[[JOHN, ADAM], [ALEX, REX]]

Используя следующий Stream:

list.stream().flatMap(l -> l.stream()).map(String::toUpperCase).collect(Collectors.toList());

Я могу получить только что-то вроде этого:

[JOHN, ADAM, ALEX, REX]
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

flatMap вам не поможет, так как вам не нужен плоский вывод. Вы должны преобразовать каждый внутренний List отдельно в верхний регистр List, а затем собрать все эти List в окончательный вложенный выходной List.

List<List<String>> list2 = list.stream()
        .map(l -> l.stream().map(String::toUpperCase).collect(Collectors.toList()))
        .collect(Collectors.toList());

Вывод:

[[JOHN, ADAM], [ALEX, REX]]

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