Scala 如何结束无限的阿卡河
我不熟悉Akka Streams,但有一个案例,我想用它来寻找无限源的置换。使用有限源的简化示例可能如下所示Scala 如何结束无限的阿卡河,scala,terminate,akka-stream,Scala,Terminate,Akka Stream,我不熟悉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 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)
问题是,当我找到要查找的内容时,我应该如何结束流?概括为
N
值,例如,大于或等于42的10个值,您可以使用:
val future = Source(1 to 100)
.map { i => if (i % 20 == 0) println(i); i }
.filter(_ == 42)
.runWith(Sink.head)
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)