java – 将计数器引入scala中的循环
发布时间:2020-12-15 05:09:15 所属栏目:Java 来源:网络整理
导读:我正在编写一个小程序,它将一个非常大的文件转换成多个较小的文件,每个文件将包含100行. 我正在迭代一次迭代: while (lines.hasNext) { val line = lines.next() } 我想介绍一个计数器,当它达到一定值时,重置计数器然后继续.在java中我会做类似的事情: int
我正在编写一个小程序,它将一个非常大的文件转换成多个较小的文件,每个文件将包含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 } } 也许你可以告诉我们你为什么要重置计数器,所以我们可以说如何做得更好? 编辑 lines.grouped(100).foreach(l => l.foreach(/* write line to file*/)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |