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 如何结束无限的阿卡河_Scala_Terminate_Akka Stream - Fatal编程技术网

Scala 如何结束无限的阿卡河

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很满意,但我

我不熟悉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)

问题是,当我找到要查找的内容时,我应该如何结束流?

概括为
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)