我是Akka Streams的新手,但有一个案例我想用它来寻找无限来源的排列。有限源的简化示例可能如下所示。
val future = Source(1 to 100)
.map { i => if (i % 20 == 0) println(i); i }
.filter(_ == 42)
.runWith(Sink.fold[Int, Int](0)(Keep.right))
这个例子输出:
20
40
60
80
100
我很明显来源已经过了42
,但我不想在获得结果之前耗尽整个流。
val result: Int = Await.result(future, 1.second)
result should be(42)
问题是,当我找到我正在寻找的内容时,我应该如何结束流?
答案 0 :(得分:4)
val future = Source(1 to 100)
.map { i => if (i % 20 == 0) println(i); i }
.filter(_ == 42)
.runWith(Sink.head)
答案 1 :(得分:2)
推广到N
值,例如如果10个值大于或等于42,您可以使用grouped
:
val N = 10
val future : Future[Seq[Int]] =
Source(1 to 100).map { i => if (i % 20 == 0) println(i); i }
.filter(_ >= 42)
.grouped(N)
.runWith(Sink.head)