In Java 8 streams API, calling chars()
on any String
object returns an IntStream
object containing all the characters.
What would be the correct way to convert the returned IntStream
object back to a String
? Calling toArray()
would give me an int[]
, which is not accepted by any of the String
constructor.
You can use toArray()
, then the String(int[], int, int)
constructor. This isn't entirely satisfactory as chars()
is specified to return UTF-16 code units, basically:
Returns a stream of int zero-extending the char values from this sequence. Any char which maps to a surrogate code point is passed through uninterpreted.
Using codePoints()
instead would be more in-keeping with this constructor, which expects code points rather than UTF-16 code units. Otherwise (with chars
) if your original string does contain surrogate pairs, you may find you get an error - I haven't tried it, but it would make sense.
I don't know of a simple way of doing this without converting to an array first.
See more on this question at Stackoverflow