Сглаживание вложенных строковых массивов

Я пытаюсь использовать потоки для сглаживания многомерного массива строк. Я мог бы сделать это с помощью циклов, но потоки, кажется, более идиоматичны. Я знаю о этот вопрос, но он использует целочисленные методы. Следующее возвращает массив объектов вместо ожидаемого String[].

String[][][] sources = new String[][][]{
           {{"a","b","c"},{"d","e","f"}}
           {{"g","h","i"},{"j","k","l"}}
};
String[] values = Arrays.stream(sources[0])
            .flatMap(Arrays::stream)
            .toArray();
.toArray(String[]::new).
Andy Turner 11.06.2018 19:24

«вместо ожидаемой строки []», если бы вы читали Javadoc, вы бы этого не ожидали.

Andy Turner 11.06.2018 19:25

Спасибо, я полностью упустил это из виду и подумал, что проблема в апстриме.

A. Scientist 11.06.2018 19:28

ваш массив должен быть массивом char char[][][] sources = new char[][][], а не String !!

YCF_L 11.06.2018 19:29

@YCF_L или элементы массива фактически объявляются с помощью " вместо '.

Andy Turner 11.06.2018 19:30

Извините, я неправильно скопировал пример.

A. Scientist 11.06.2018 19:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы ваш текущий пример компилировался, toArray должен быть:

String[] values = Arrays.stream(sources[0])
                        .flatMap(Arrays::stream)
                        .toArray(String[]::new); // <----------------------

Если вы хотите сделать это для sources, вам нужно будет использовать flatMap дважды, а затем собрать в массив с помощью .toArray(String[]::new):

String[] values = Arrays.stream(sources)
                        .flatMap(Arrays::stream)
                        .flatMap(Arrays::stream)
                        .toArray(String[]::new);

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