如何使用流将 int[] 数组的所有元素添加到 StringBuilder,为每个元素添加额外的空间

问题描述 投票:0回答:3

我正在尝试使用以下代码将

int
数组
brr
的所有元素添加到
StringBuilder
res
中:

StringBuilder res = new StringBuilder();

Arrays.stream(brr).forEach(res::append);

我希望

StringBuilder
是:

0 1 2 3 4 5

然而,实际上是:

012345
java java-stream stringbuilder
3个回答
2
投票

如果你不介意尾随空格,你可以这样做

Arrays.stream(brr).forEach(i -> res.append(i).append(" "));

如果您不想打印尾随空格,可以修剪字符串

System.out.println(res.toString().trim());

2
投票

如果不需要使用 StringBuilder,那么您可以执行以下操作。

调用

Arrays.stream()
将返回
IntStream
。使用
mapToObj
String::valueOf
作为 mapper 会将 primitive int 转换为 String。这将返回一个
Stream<String>
。最后,使用
Collectors.joining
,我们可以用空格连接流的各个字符串元素。

 String result = Arrays.stream(a)
        .mapToObj(String::valueOf)
        .collect(Collectors.joining(" "));

1
投票

tl;博士

单行:

String.join ( 
    " " , 
    Arrays.stream ( ints ).mapToObj ( String :: valueOf ).toArray ( String[] :: new ) 
)

0 1 2 3 4 5

详情

制作一些样本数据。

int[] ints = IntStream.rangeClosed ( 0 , 5 ).toArray ( );

将每个

int
原始值转换为文本,每段文本都是单个字符,是基于
String
的数字版本。将这些
String
对象收集到一个数组中。

String[] strings = Arrays.stream ( ints ).mapToObj ( String :: valueOf ).toArray ( String[] :: new );

将该数组中的字符串连接在一起,内部仅用空格字符分隔。没有尾随空格,这是

String.join
的便利优势。

String result = String.join ( " " , strings );

把它们放在一起。

int[] ints = IntStream.rangeClosed ( 0 , 5 ).toArray ( );
String[] strings = Arrays.stream ( ints ).mapToObj ( String :: valueOf ).toArray ( String[] :: new );
String result = String.join ( " " , strings );
System.out.println ( "result = " + result );

请参阅此 在 Ideone.com 上运行的代码

结果 = 0 1 2 3 4 5

© www.soinside.com 2019 - 2024. All rights reserved.