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.
你可以使用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)
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |