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
})