微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 将计数器引入scala中的循环

我正在编写一个小程序,它将一个非常大的文件转换成多个较小的文件,每个文件将包含100行.

我正在迭代一次迭代:

  while (lines.hasNext) {
      val line = lines.next()
  }

我想介绍一个计数器,当它达到一定值时,重置计数器然后继续.在java中我会做类似的事情:

int counter = 0;
      while (lines.hasNext) {
          val line = lines.next()
if(counter == 100){
 counter = 0;
}
++counter
      }

scala或替代方法中是否有类似的东西?

解决方法:

传统上在scala中使用.zipwithIndex

scala> List("foo","bar")
res0: List[java.lang.String] = List(foo, bar)

scala> for((x,i) <- res0.zipwithIndex) println(i + " : " +x)
0 : foo
1 : bar

(这也适用于你的行,就像它们在Iterator中一样,例如hasNext和next()方法,或者其他一些scala集合)

但是如果你需要一个复杂的逻辑,比如重置计数器,你可以用与java中相同的方式编写它:

var counter = 0
while (lines.hasNext) {
  val line = lines.next()
  if(counter % 100 == 0) {
    // Now write to another file
  }
}

也许你可以告诉我们你为什么要重置计数器,所以我们可以说如何做得更好?

编辑
根据您的更新,使用分组方法更好,因为@ pr1001建议:

lines.grouped(100).foreach(l => l.foreach(/* write line to file*/))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐