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中是否有类似的方法或替代方法
# 1 楼答案
如果重置计数器表示原始列表中存在重复的数据组,则可能需要使用
grouped
方法:更新:既然你是从一个文件中读取,你应该能够非常有效地迭代该文件:
当然,这也可以作为一种理解的方式来写
在将每组行写入自己的文件之前,您甚至可以通过将
groupedLines
转换为带有.par
的并行集合来获得更好的性能# 2 楼答案
可以使用
zipWithIndex
和一些转换# 3 楼答案
在scala中,通常使用
.zipWithIndex
(这也适用于您的行,只要它们在迭代器中,例如has
hasNext
和next()
方法,或其他一些scala集合)但如果您需要一个复杂的逻辑,比如重置计数器,您可以用与java相同的方式编写它:
也许你可以告诉我们为什么要重置计数器,所以我们可以说如何做得更好
编辑 根据您的更新,最好使用分组方法,如@pr1001所建议的:
# 4 楼答案
这将奏效: