有没有一种惯用的方法来处理 Akka 流Source
第一个元素以特殊的方式?我现在拥有的是:
var firstHandled = false
source.map { elem =>
if(!firstHandled) {
//handle specially
firstHandled = true
} else {
//handle normally
}
}
Thanks
虽然我通常会同意拉蒙的答案,但你也可以使用prefixAndTail http://doc.akka.io/docs/akka/2.4/scala/stream/stages-overview.html#prefixAndTail,前缀为 1,以及flatMapConcat http://doc.akka.io/docs/akka/2.4/scala/stream/stages-overview.html#flatMapConcat实现类似的目标:
val src = Source(List(1, 2, 3, 4, 5))
val fst = Flow[Int].map(i => s"First: $i")
val rst = Flow[Int].map(i => s"Rest: $i")
val together = src.prefixAndTail(1).flatMapConcat { case (head, tail) =>
// `head` is a Seq of the prefix elements, which in our case is
// just the first one. We can convert it to a source of just
// the first element, processed via our fst flow, and then
// concatenate `tail`, which is the remainder...
Source(head).via(fst).concat(tail.via(rst))
}
Await.result(together.runForeach(println), 10.seconds)
// First: 1
// Rest: 2
// Rest: 3
// Rest: 4
// Rest: 5
这当然不仅适用于第一个项目,而且适用于第一个项目N物品,但条件是这些物品将被严格收藏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)