我有这段代码:
for (f <- file_list){
val file_name = path + "\\" + f + ".txt"
val line_list = Source.fromFile(file_name).getLines()
println (file_name + ": " + line_list.length)
println (file_name + ": " + line_list.length)
total_number_lines += line_list.size
}
我有一个文件列表,我为每个文件打开它,将其加载为行列表,然后计算列表中的行数。
前一次调用line_list.length
给出正确的行号值,但后者总是返回零。实际上,执行length
函数后,line_list
列表似乎是空的。
我真的不明白为什么会这样。
我缺少什么?
答案 0 :(得分:6)
Source.getLines()
会返回Iterator[String]
,而不是集合,因此在其上调用.length
将完全消耗它。
如果您想多次使用Source.fromFile(file_name).getLines().toList
,可以使用{{1}}。
答案 1 :(得分:5)
getLines()
返回Iterator[String]
,您只能遍历一次迭代器。调用length
会耗尽迭代器,因此在到达结束时会调用length
和size
的后续调用,因此它显示为空:
特别重要的是要注意,除非另有说明, 在调用方法之后,永远不应该使用迭代器。他们俩 最重要的例外也是唯一的抽象方法:next和 hasNext。