加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

除了最后一个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或任何其他方法行为任何特定的方式;如果滑动不破,就会有上述的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读