如何在Java8中将字符流转换为字符串
如何在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
流
转换为字符串
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));