List
➠ Stream
➠ StringBuilder
➠String
一种解决方案是将您的List
转换为Stream
. 然后将该流的元素收集到一个StringBuilder
. 该类StringBuilder
提供了appendCodePoint
一种专门用于容纳代码点整数的方法。当 mutableStringBuilder
完成后,转换为 immutable 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();
请参阅在 IdeOne.com 上实时运行的代码。
输入:狗
代码点:[100、111、103、128054]
输出:狗
要了解带有StringBuilder
方法引用的代码是如何工作的,请参阅Java 8 Int Stream collect with StringBuilder。
为方便起见,我们可以为此代码创建一个实用方法。为了安全起见,我们可以添加一个调用以.filter
跳过任何无效的代码点编号(负数或超出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 ;
}
查看在 IdeOne.com 上实时运行的代码。