我有许多大文件,我想处理除了每个文件中的最后一行以外的所有文件.如果文件很小,我可以转换为TraversableLike并使用"init"方法,例如:
lines.toList.init
Run Code Online (Sandbox Code Playgroud)
但是文件很大所以我需要将事物保存为迭代器.有没有一种简单的方法可以在迭代器上获得类似"init"的内容?我正在考虑以下内容,但我不相信它会一直有效:
lines.takeWhile(_ => lines.hasNext)
Run Code Online (Sandbox Code Playgroud)
Rex*_*err 14
你依靠takeWhile首先抓住下一行,然后检查是否还有另一行.它在默认迭代器中以这种方式工作.对于任何特定的迭代器,我希望如果它能够工作,它应该始终有效.
如果它失败了,你需要缓存结果.您可以创建自己的迭代器,或者更容易(如果这不是紧急的性能关键代码):
lines.sliding(2).map(_.head)
Run Code Online (Sandbox Code Playgroud)
测试如下:
List(1,2,3,4,5).iterator.sliding(2).map(_.head).toList
Run Code Online (Sandbox Code Playgroud)
您不必依赖takeWhile任何特定方式的任何其他方法; 如果sliding没有破坏,它将具有上述行为.
如果你想跳过前两行,并删除最后4行,你可以迭代
List(1, 2, 3).toIterable.drop(1).dropRight(1)
Run Code Online (Sandbox Code Playgroud)
如果你已经有了IterableLike
il.drop(1).dropRight(1)
Run Code Online (Sandbox Code Playgroud)