3

私は 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)

質問は、探しているものを見つけたときにストリームを終了するにはどうすればよいですか?

4

2 に答える 2

4
val future = Source(1 to 100)
    .map { i => if (i % 20 == 0) println(i); i }
    .filter(_ == 42)
    .runWith(Sink.head)
于 2015-11-01T19:26:42.353 に答える
2

N42 以上の 10 個の値など、値に一般化すると、次のように使用できます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)
于 2015-11-04T12:19:30.927 に答える