Непонятно, чего вы пытаетесь достичь этим обходным путем из ненужных операций. Если вы хотите выполнить потоковую передачу по массиву, просто начните с этой операции, вместо создания потока одного элемента, чтобы связать flatMap
, чтобы связать другой map
.
Ваш код уже содержит подход для потоковая передача по массиву char[]
в середине других операций с использованием конструктора String
.
char[] arr = { '1', '2', '3', '4', '5' };
new String(arr).chars().forEach(i -> System.out.print(i + " "));
Это напечатает числа Unicode. Если вы хотите вместо этого печатать символы, просто измените операцию терминала:
new String(arr).chars().forEach(i -> System.out.print((char)i + " "));
или
new String(arr).chars().forEach(i -> System.out.printf("%c ", i));
Вы также можете использовать
new String(arr).chars().mapToObj(i -> (char)i).forEach(i -> System.out.print(i+" "));
, но это касается бокса накладные расходы, поскольку он создает Stream<Character>
.
Обратите внимание, что new String(arr)
несет накладные расходы на копирование, поскольку создает неизменяемый объект. Вы можете избежать этого, используя
CharBuffer.wrap(arr).chars().forEach(i -> System.out.printf("%c ", i));
. Конечно, вы можете вставить столько завитушек, сколько захотите, например,
Stream.of(arr)
.flatMapToInt(array -> CharBuffer.wrap(array).chars())
.mapToObj(i -> (char)i) // returns a Stream<Character> not Stream<Integer>
.forEach(i -> System.out.printf("%c ", i));
, но для этого нет причин.