我有一个Stream[A]
和一个zeroOrMoreB(value: A): Seq[B]
给定A
返回零或更多的函数B
。从这两部分,我如何构造一个Stream[B]
?
我可以得到一个Stream[Stream[B]]
(见下文),但我不知道如何把它弄平。
stream <- ZStream
.fromIterable(vectorOfAs)
.map(zeroOrMoreB)
我有一个Stream[A]
和一个zeroOrMoreB(value: A): Seq[B]
给定A
返回零或更多的函数B
。从这两部分,我如何构造一个Stream[B]
?
我可以得到一个Stream[Stream[B]]
(见下文),但我不知道如何把它弄平。
stream <- ZStream
.fromIterable(vectorOfAs)
.map(zeroOrMoreB)
正如我常说的,Scaladoc是你的朋友。
您可以使用mapConcat
val stream = ZStream.fromIterable(vectorOfAs).mapConcat(zeroOrMoreB)
现在,如果zeroOrMoreB
实际上返回ZStream而不是Seq,您只需使用flatMap
val stream = ZStream.fromIterable(vectorOfAs).flatMap(zeroOrMoreB)
最后,如果你喜欢for语法,你可以这样做
val stream = for {
a <- ZStream.fromIterable(vectorOfAs)
b <- ZStream.fromIterable(zeroOrMoreB(a))
} yield b
我显然没有直接思考 - 成功.flatMap
了。
stream <- ZStream
.fromIterable(vectorOfAs)
.flatMap(a => zeroOrMoreB(a))