Scala 如何从Akka流图中获得具体化结果?

Scala 如何从Akka流图中获得具体化结果?,scala,akka,akka-stream,Scala,Akka,Akka Stream,我试图找出如何从scala-Akka流图中得到具体化的结果 我正在使用“com.typesafe.akka”%%“akka流实验”%%“1.0” 我看了这本书,但找不到任何例子 那么,假设我有一个代码 val g = FlowGraph.closed() { implicit builder=> import FlowGraph.Implicits._ val in = Source.apply(1 until 10) val plus = Flow[Int].map(_ +

我试图找出如何从scala-Akka流图中得到具体化的结果

我正在使用
“com.typesafe.akka”%%“akka流实验”%%“1.0”

我看了这本书,但找不到任何例子

那么,假设我有一个代码

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
中得到结果,但它返回单位。如何处理


谢谢。

编辑:您可能也想看看如何创建流。。。我认为
RunnableGraph
可能更适合您的情况,然后
run
将返回
Mat
类型

否则,请尝试查看手册本节中的
.mapMaterializedValue(v=>…)
调用(特别是第40行):

我想这就是你想要做的

编辑:我找到的这个聊天应用程序(第54行)中也使用了它:


流程图上看,您似乎无法做到这一点。您需要在外部创建所有流,然后在
流程图中使用它们

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)