除了最后一个Scala迭代器(a.k.a.Iterator.init)
发布时间:2020-12-16 09:18:54 所属栏目:安全 来源:网络整理
导读:我有一些大文件,我想要处理除每个文件最后一行之外的所有文件.如果文件很小,我可以转换为TraversableLike,并使用“init”方法,例如: lines.toList.init 但是这些文件很大,所以我需要保留一些迭代器.有没有一种简单的方式在迭代器上得到类似“init”的东西?
我有一些大文件,我想要处理除每个文件最后一行之外的所有文件.如果文件很小,我可以转换为TraversableLike,并使用“init”方法,例如:
lines.toList.init 但是这些文件很大,所以我需要保留一些迭代器.有没有一种简单的方式在迭代器上得到类似“init”的东西?我正在考虑以下几点,但我不确定它会永远奏效: lines.takeWhile(_ => lines.hasNext) 解决方法
你依靠takeWhile抓住下一行,然后检查,看看是否有另一行.它在默认迭代器中以这种方式工作.对于任何特定的迭代器,我希望如果它有效,它应该总是工作.
如果失败,您需要缓存结果.您可以使自己的迭代器执行此操作,或者更容易(如果这不是紧急性能关键代码): lines.sliding(2).map(_.head) 测试如下: List(1,2,3,4,5).iterator.sliding(2).map(_.head).toList 你不必依赖takeWeile或任何其他方法行为任何特定的方式;如果滑动不破,就会有上述的行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |