我试图弄清楚如何从scala Akka Stream图中获得具体化结果。
我正在使用"com.typesafe.akka" %% "akka-stream-experimental" % "1.0"
。
我查看了docs,但找不到任何示例。
所以,让我们说我有一个代码
val g = FlowGraph.closed() { implicit builder=>
import FlowGraph.Implicits._
val in = Source.apply(1 until 10)
val plus = Flow[Int].map(_ + 10)
val out = Sink.fold[Seq[Int], Int](Nil){
case (acc, num) => if (num % 2 == 0) acc :+ num else acc
}
in ~> plus ~> out
}
val result = g.run()
我想从图g
得到结果,但它返回Unit。如何处理?
谢谢。
答案 0 :(得分:1)
编辑:你可能也想看看你是如何创建流程的......我认为RunnableGraph
可能对你的情况更好,然后run
会返回Mat
类型。
否则,请尝试查看手册本节中的.mapMaterializedValue(v => ...)
来电(特别是第40行):
我认为这就是你要做的事情。
编辑:它也用于我找到的这个聊天应用程序(第54行):
答案 1 :(得分:0)
您似乎无法从FlowGraph
执行此操作。您需要在外部创建所有流,然后在FlowGraph
内使用它们。
val in = Source.apply(1 until 10)
val plus = Flow[Int].map(_ + 10)
val out = Sink.fold[Seq[Int], Int](Nil) {
case (acc, num) => if (num % 2 == 0) acc :+ num else acc
}
因此,代码看起来像
val g = FlowGraph.closed(in, plus, out)((_, _, _)) { implicit builder => (src, f, dst) =>
import FlowGraph.Implicits._
src ~> f ~> dst
}
另一种我发现更简单的方法是
val z = in.via(plus).toMat(out)(Keep.right)