如何启动Scala流一段距离"in"(ala takeWhile)?

Lar*_*ien 2 scala stream lazy-evaluation

问题为什么我的takeWhile无法使用我的Stream清楚地表明它takeWhile()是懒惰的:

Stream.from(1).takeWhile(_ < 5) //Stream(1, ?) 
Run Code Online (Sandbox Code Playgroud)

但对于这个问题,解决方案似乎是可以根据toList需要强制进行评估.但是,如果你想要的,不是列表或具体价值,而是继续Stream

似乎我可以通过强制评估来实现它,直到我找到所需的值然后Stream再次实例化并使用index但肯定有更好的方法?

更新:显然我的措辞令人困惑; 我想要提供的解决方案dropWhile.

Tra*_*own 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, ?)
Run Code Online (Sandbox Code Playgroud)

或者,如果您只关心"持续流",dropWhile:

scala> val after = Stream.from(1).dropWhile(_ < 5)
after: scala.collection.immutable.Stream[Int] = Stream(5, ?)
Run Code Online (Sandbox Code Playgroud)