0

我有一个Stream[A]和一个zeroOrMoreB(value: A): Seq[B]给定A返回零或更多的函数B。从这两部分,我如何构造一个Stream[B]

我可以得到一个Stream[Stream[B]](见下文),但我不知道如何把它弄平。

stream <- ZStream
  .fromIterable(vectorOfAs)
  .map(zeroOrMoreB)
4

2 回答 2

3

正如我常说的,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
于 2020-10-28T17:18:09.793 回答
0

我显然没有直接思考 - 成功.flatMap了。

stream <- ZStream
  .fromIterable(vectorOfAs)
  .flatMap(a => zeroOrMoreB(a))
于 2020-10-28T17:18:47.223 回答