Java 8 Streams: IntStream to String

2022-09-01 05:08:17

在 Java 8 流 API 中,调用任何对象都会返回包含所有字符的对象。chars()StringIntStream

将返回的对象转换回的正确方法是什么?调用会给我一个 ,它不被任何构造函数接受。IntStreamStringtoArray()int[]String


答案 1

使用 的方法也可以解决问题,StringBuilderappendCodePoint

IntStream in = "Convert me to a String".codePoints();

String intStreamToString = in.collect(StringBuilder::new,
        StringBuilder::appendCodePoint, StringBuilder::append)
        .toString();

System.out.println(intStreamToString);

答案 2

您可以使用 ,然后使用 String(int[], int, int) 构造函数。这并不完全令人满意,因为指定返回UTF-16代码单元,基本上:toArray()chars()

返回一个 int 零流,从此序列中扩展 char 值。任何映射到代理代码点的字符都将在未解释的情况下传递。

相反,使用 codePoints() 将更符合此构造函数,该构造函数需要代码点而不是 UTF-16 代码单元。否则(with ),如果您的原始字符串确实包含代理项对,您可能会发现您收到错误 - 我还没有尝试过,但它是有道理的。chars

我不知道在不首先转换为数组的情况下执行此操作的简单方法。


推荐