Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何根据条件将元素从源/流发送到2个或多个接收器?_Scala_Stream_Akka - Fatal编程技术网

Scala 如何根据条件将元素从源/流发送到2个或多个接收器?

Scala 如何根据条件将元素从源/流发送到2个或多个接收器?,scala,stream,akka,Scala,Stream,Akka,我有这样一个来源: Source[String, NotUsed] and a Flow[String, Int] 我想根据条件将元素发送到两个不同的接收器 这样做是否更好: source ~> flow flow.filter(cond) ~> sink1 flow.filter(!cond) ~> sink2 或者使用广播公司,如: source ~> flow ~> broadcast broadcast ~> sink1.filter(cond)

我有这样一个来源:

Source[String, NotUsed] and a Flow[String, Int]
我想根据条件将元素发送到两个不同的接收器

这样做是否更好:

source ~> flow
flow.filter(cond) ~> sink1
flow.filter(!cond) ~> sink2
或者使用广播公司,如:

source ~> flow ~> broadcast
broadcast ~> sink1.filter(cond)
broadcast ~> sink2.filter(!cond)

我真正想问的是: 根据条件将元素发送到相应接收器的最佳方式(更快)是什么

有没有这样的方法:

if(cond)
   flow ~> sink1
else
   flow ~> sink2
无需对所有元素进行两次过滤?

您可以使用。以下示例将整数源划分为两个汇:一个用于偶数,另一个用于奇数:

val intSource = Source(1 to 100)
val sink1 = Sink.seq[Int]
val sink2 = Sink.seq[Int]

val g = RunnableGraph.fromGraph(GraphDSL.create(sink1, sink2)((_, _)) {
  implicit builder => (s1, s2) =>
  import GraphDSL.Implicits._

  val partition = builder.add(Partition[Int](2, i => i % 2))

  intSource ~> partition.in
  partition.out(0) ~> s1.in
  partition.out(1) ~> s2.in
  ClosedShape
})