我正在尝试打印一个包含字符串和整数元素的连续流。我尝试了几种方法,但没有一个有效。我在互联网上找不到正确的方法。正如您所看到的,这只是一个测试代码:
import java.util.stream.*;
class testconcat{
public static void main(String[] args){
Stream<String> part1=Stream.of("Testing the ");
Stream<String> part2=Stream.of("streams concat");
Stream<String> part3=Stream.of(" on Java, dividing ");
Stream<String> part4=Stream.of("this phrase in ");
IntStream part5=IntStream.of(6);
Stream<String> part6=Stream.of(" parts.");
String phrase=Stream.concat(Stream.concat(Stream.concat(Stream.concat(Stream.concat(part1, part2), part3), part4), part5), part6);
System.out.println(phrase);
}
}
我知道第5部分是一个整数,所以我不能以常规方式连接它,所以我也尝试过:
IntStream part5=IntStream.of(6);
Stream<String> part6=Stream.of(" parts.");
String phrase=Stream.concat(IntStream.concat(Stream.concat(Stream.concat(Stream.concat(part1, part2), part3), part4), part5), part6);
System.out.println(phrase);
}
}
还有:
Integer part5=6;
String part6=(" parts.");
String phrase=Stream.concat(Stream.concat(Stream.concat(Stream.concat(Stream.concat(part1, part2), part3), part4);
System.out.println(phrase + Integer.toString(part5) + part6);
}
}
这些都不起作用。有办法做到这一点吗?预先感谢。
我正在尝试打印一个包含字符串和整数元素的连续流
错误,IntStream 是原始
int
值的特定流,它与 Stream 不同,因此必须调用 IntStream::boxed
或 IntStream::mapToObj
来生成 Stream<?>
,可以在Stream::concat
:
Stream<?> many = Stream
.concat(part1, Stream
.concat(part2, Stream
.concat(part3, Stream
.concat(part4, Stream
.concat(part5.boxed(), part6)
)
)
)
);
要将字符串串联的结果作为 String 获得,应在使用
Stream.collect(Collectors.joining())
(或 String::valueOf
)将流中的所有对象映射到 String 后应用终端操作 Objects::toString
:
String result = many.map(String::valueOf).collect(Collectors.joining());
System.out.println(result);
// -> Testing the streams concat on Java, dividing this phrase in 6 parts.
但是,这种冗长的流连接是多余的,可以使用
Stream
连接 Stream.of + Stream::flatMap
。 在下面的示例中,IntStream
立即映射到字符串,因此不需要额外的Stream::map
:
Stream<String> many = Stream
.of(part1, part2, part3, part4, part5.mapToObj(String::valueOf), part6)
.flatMap(s -> s);
String res = many.collect(Collectors.joining());
System.out.println(res);
// -> Testing the streams concat on Java, dividing this phrase in 6 parts.
如果我理解正确并且您想创建组合流字符串,您可以使用类似以下内容:
Stream.concat(...):
Stream<Integer> integerStream = IntStream.range(72, 129).boxed(); // to convert to Stream<Integer>
Stream<String> stringStream =Stream.of(" String Stream");
String str = Stream.concat(integerStream.map(String::valueOf), stringStream).collect(Collectors.joining(","));
System.out.println(str);
或者
Stream.of(...)
Stream<Integer> integerStream = IntStream.range(72, 129).boxed(); // to convert to Stream<Integer>
Stream<String> stringStream =Stream.of(" String Stream");
String str = Stream.of(integerStream.map(String::valueOf), stringStream).flatMap(t -> t).collect(Collectors.joining(","));
System.out.println(str);