2

なぜ私のtakeWhileが私のストリームで動作しないのかという質問はそれtakeWhile()が怠惰であることを明らかにします:

Stream.from(1).takeWhile(_ < 5) //Stream(1, ?) 

しかし、その質問に対する解決策は、toList必要に応じて評価を強制するために使用できるということのようでした。しかし、必要に応じて、リストや特定の値ではなく、継続する場合はどうStreamでしょうか。

Stream目的の値が見つかるまで評価を強制し、もう一度インスタンス化して使用することでそれができるように思えますindexが、確かにもっと良い方法がありますか?

更新:どうやら私の言い回しは混乱していました。によって提供されるソリューションが欲しかったdropWhile

4

3 に答える 3

7

あなたが使用することができますspan

scala> val (before, after) = Stream.from(1).span(_ < 5)
before: scala.collection.immutable.Stream[Int] = Stream(1, ?)
after: scala.collection.immutable.Stream[Int] = Stream(5, ?)

または、「継続的なストリーム」のみを気にする場合は、dropWhile

scala> val after = Stream.from(1).dropWhile(_ < 5)
after: scala.collection.immutable.Stream[Int] = Stream(5, ?)
于 2012-07-11T19:02:23.307 に答える
1

あなたが探しているようですforce

scala> val s = Stream.from(1).takeWhile(_<10)
s: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> s.force
res84: scala.collection.immutable.Stream[Int] = Stream(1, 2, 3, 4, 5, 6, 7, 8, 9)
于 2012-07-11T18:59:43.660 に答える
0

あなたが何を求めているのかを理解するのは非常に困難です-誰もが別のことに答えているのを見ることができます。別の考えられる解釈に対する答えは次のとおりです。ストリームを値から開始する必要があります。さて、この場合、あなたはこれを行うことができます:

scala> Stream.from(1).dropWhile(_ < 5) //Stream(1, ?) 
res3: scala.collection.immutable.Stream[Int] = Stream(5, ?)
于 2012-07-11T21:45:50.387 に答える