【问题标题】:Need an example of how to use flatMapPrefix in akka stream需要一个如何在 akka 流中使用 flatMapPrefix 的示例
【发布时间】:2020-07-10 12:46:52
【问题描述】:

我认为我需要这种方法,但我不确定它是如何工作的。谁能举例说明一下它的用法。

 def flatMapPrefix[Out2, Mat2](n: Int)(f: immutable.Seq[Out] => Flow[Out, Out2, Mat2]): Repr[Out2] = {
    via(new FlatMapPrefix(n, f))
  }

处理的第 n 个元素是否也向下游传递?还是只有后面的人?

【问题讨论】:

    标签: akka-stream


    【解决方案1】:

    只有稍后出现的元素才会传递给在flatMapPrefix 中创建的流。

    这将打印 1 到 10:

    Source(1 to 10)
        .runForeach(i => println(i))
    

    这里我们引入一个Flow,它什么都不做,所以它也会打印1到10

      Source(1 to 10)
        .via(Flow[Int])
        .runForeach(i => println(i))
    

    这里我们使用前 5 个元素创建一个 Flow,它将处理元素的 其余,因此它会打印 6 到 10:

      Source(1 to 10)
        .flatMapPrefix(5) { l =>
          Flow[Int]
        }
        .runForeach(i => println(i))
    

    虽然我们仍然可以使用prepend 获取这些元素。这会打印 1 到 10:

      Source(1 to 10)
        .via(Flow[Int])
        .flatMapPrefix(5) { l =>
          Flow[Int]
            .prepend(Source(l))
        }
        .runForeach(i => println(i))
    

    【讨论】:

    • 谢谢?? 但奇怪的功能!!不知道什么时候有用
    • 每当您的处理以某种方式依赖于流动元素中的数据时。假设您有示例中的整数 Source,并且您想将所有元素乘以流中的第一个元素。如果没有flatMapPrefix 一口气做到这一点,那将非常棘手。
    • 啊,我确实看到了切肉刀的东西!谢谢??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多