List ➠ Stream ➠ StringBuilder ➠ String
一种解决方案是将您的List 转换为Stream。然后将该流的元素收集到StringBuilder 中。 StringBuilder 类提供了一个 appendCodePoint 方法,专门用于容纳代码点整数。当可变的StringBuilder 完成后,转换为不可变的String。
String output = codePoints.stream().collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append ).toString();
或不同的格式:
String output =
codePoints
.stream()
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString();
这是一些示例代码。
String input = "dog?" ;
List < Integer > codePoints = input.codePoints().boxed().collect( Collectors.toList() ); // In Java 16+, replace the last part with simply `.toList()`.
String output =
codePoints
.stream()
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString();
看到这个code run live at IdeOne.com。
输入:狗?
代码点:[100、111、103、128054]
输出:狗?
要了解带有StringBuilder 方法引用的代码是如何工作的,请参阅Java 8 Int Stream collect with StringBuilder。
为方便起见,我们可以为这段代码创建一个实用方法。为了安全起见,我们可以添加对.filter 的调用以跳过any invalid code point 号码(负数或超出Character.MAX_CODE_POINT)。
public static final String listOfCodePointsToString( List< Integer > codePoints )
{
String output =
codePoints
.stream()
.filter( codePoint -> Character.isValidCodePoint( codePoint ) )
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString();
return output ;
}
看到code run live at IdeOne.com。