我有一个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))