提问人:FSm 提问时间:10/16/2020 最后编辑:FSm 更新时间:10/16/2020 访问量:61
在收集流线之前先对其进行处理
Concat stream lines before collecting them
问:
简单地说,下面的代码生成了一个包含五行的流,我需要将这些行合并为一行(在流式传输时)以供进一步使用,然后再收集它们。代码即将将一个字符串转换为一个长二进制字符串
Stream<String> binText = "hello".chars()
.mapToObj(x-> Integer.toBinaryString(x))
.map(x-> String.format("%8s", x).replaceAll(" ", "0"));
我对“流 API”这个术语有点陌生,所以任何建议将不胜感激。
更新:假设我想将上述代码中的流映射到 of 和 中,实际上,我尝试了以下代码,它工作正常,但似乎效率低下,需要规范化int []
0
1
int [] binText = "hello".chars()
.mapToObj(x-> Integer.toBinaryString(x))
.map(x-> String.format("%8s", x).replaceAll(" ", "0"))
.flatMap(s-> Stream.of(s.split("")))
.mapToInt(Integer::parseInt)
.toArray();
不是吗?
答:
1赞
Naman
10/16/2020
#1
你要找的是一个收集器来连接这些字符串,你会有
.collect(Collectors.joining())
最终,完整的解决方案可能是:
String binText = "hello".chars()
.mapToObj(Integer::toBinaryString)
.map(x-> String.format("%8s", x).replace(" ", "0"))
.collect(Collectors.joining());
评论
1赞
Eugene
10/16/2020
我希望你是对的,OP说:......在收集它们之前。可能是他把术语弄错了
1赞
Polygnome
10/16/2020
@Eugene或.collect(Collectors.joining()).stream()...
Collectors.collectingAndThen(...)
0赞
Naman
10/16/2020
@Eugene,是的,至少与期望有关,将字符串转换为一个长二进制字符串:)
0赞
FSm
10/16/2020
@Eungene,很高兴知道,非常感谢Collectors.collectingAndThen
评论
String
Stream<5Lines, 5Lines, 5Lines>