val i = (1 to 8).toIterator
val oneToThree = i.takeWhile(_ <= 3).toList
// List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在我希望迭代器仍然包含(3, 4, 5, 6, 7, 8),但如果我继续:
val fourToSix = i.takeWhile(_ <= 6).toList
// List(5, 6)
Run Code Online (Sandbox Code Playgroud)
元素3失踪了.我将优选喜欢fourToSix要List(4, 5, 6).我该如何使用takeWhile或进行类似的操作以使其有效?
请注意有关takeWhile状态的文档:
重用:在调用此方法之后,应该丢弃它被调用的迭代器,并仅使用返回的迭代器.使用旧迭代器是未定义的,可能会发生更改,并且可能也会导致对新迭代器进行更改.
所以在你i打电话之后你不应该使用takeWhile它.
但要实现您想要的,您可以使用以下span方法:
scala> val i = (1 to 8).iterator
i: Iterator[Int] = non-empty iterator
scala> val (oneToThree, rest) = i.span(_ <= 3)
oneToThree: Iterator[Int] = non-empty iterator
rest: Iterator[Int] = unknown-if-empty iterator
scala> oneToThree.toList
res1: List[Int] = List(1, 2, 3)
scala> val fourToSix = rest.takeWhile(_ <= 6)
fourToSix: Iterator[Int] = non-empty iterator
scala> fourToSix.toList
res2: List[Int] = List(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |