如何在Java8中将字符流转换为字符串

如何在Java8中将字符流转换为字符串,java,java-8,java-stream,Java,Java 8,Java Stream,如何在Java8中将流转换为字符串Collectors.joining()需要CharSequence,因此给出编译错误。请参阅@jubobs解决方案链接。也就是说,您可以这样做: Stream<Character> testStream = Stream.of('a', 'b', 'c'); String result = testStream.collect(Collector.of( StringBuilder::new, StringBuilder::app

如何在Java8中将
转换为
字符串
Collectors.joining()
需要
CharSequence
,因此给出编译错误。

请参阅@jubobs解决方案链接。也就是说,您可以这样做:

Stream<Character> testStream = Stream.of('a', 'b', 'c');

String result = testStream.collect(Collector.of(
    StringBuilder::new,
    StringBuilder::append,
    StringBuilder::append,
    StringBuilder::toString));
Stream testStream=Stream.of('a','b','c');
字符串结果=testStream.collect(Collector.of(
StringBuilder::新建,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString));

这比先将每个字符ping成一个
字符串,然后加入
更有效,因为
StringBuilder#append(char c)
将省略中间步骤。

字符
转换成
字符串

Stream<Character> st = Stream.of('C','h','t');
String result = st.map(c->c.toString()).collect(Collectors.joining());
System.out.println(result);  //Cht

收集器。在内部连接
使用
StringBuilder

或者只需使用
forEach

StringBuilder builder = new StringBuilder();

    Stream<Character> st = Stream.of('C','h','t');

    st.forEach(ch->builder.append(ch));
StringBuilder=新建StringBuilder();
流st=流of('C','h','t');
st.forEach(ch->builder.append(ch));

请参见或
.map(Character::toString)
,但这不如
StringBuilder::append
…map(Object::toString)…
应该可以工作
收集器。连接
在内部使用
StringBuilder
,但这并没有改变这样一个事实:在执行
StringBuilder.append(char)
之前,通过
StringBuilder.append(String)
Character
元素添加到
StringBuilder.append(String)
中比先将每个元素转换为
字符串更有效。但是,由于这些都是长度为1的字符串,因此每个元素的成本并不是灾难性的。不适用于
“abc”.chars()
,它是一个IntStream。在这里,必须使用
.collect(StringBuilder::new,StringBuilder::appendCodePoint,StringBuilder::append)
。请参见AFAICT第一个
StringBuilder::append
引用正在调用
StringBuilder.append(Object)
,它将对每个字符调用
toString()
,从而影响性能。这将确保调用正确的
append
方法:
.collect(StringBuilder::new,(builder,c)->builder.append((char)c),StringBuilder::append)
StringBuilder builder = new StringBuilder();

    Stream<Character> st = Stream.of('C','h','t');

    st.forEach(ch->builder.append(ch));