Я пытаюсь использовать потоки для сглаживания многомерного массива строк. Я мог бы сделать это с помощью циклов, но потоки, кажется, более идиоматичны. Я знаю о этот вопрос, но он использует целочисленные методы. Следующее возвращает массив объектов вместо ожидаемого 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();
«вместо ожидаемой строки []», если бы вы читали Javadoc, вы бы этого не ожидали.
Спасибо, я полностью упустил это из виду и подумал, что проблема в апстриме.
ваш массив должен быть массивом char char[][][] sources = new char[][][], а не String !!
@YCF_L или элементы массива фактически объявляются с помощью " вместо '.
Извините, я неправильно скопировал пример.




Чтобы ваш текущий пример компилировался, 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);
.toArray(String[]::new).