为什么长度函数似乎删除了列表?

Asl*_*986 1 scala

我有这段代码:

 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
              }
Run Code Online (Sandbox Code Playgroud)

我有一个文件列表,对于每个文件我打开它,加载它作为它的行列表然后我计算列表中的行数.

前者调用line_list.length给出正确的行号值,但后者总是返回零.实际上,length执行该函数后,line_list列表似乎是空的.

我真的不明白为什么会这样.

我错过了什么?

gou*_*ama 6

Source.getLines()返回一个Iterator[String],而不是一个集合,所以调用.length它将完全消耗它.

Source.fromFile(file_name).getLines().toList如果您想多次使用它,可以使用.


Lee*_*Lee 5

getLines()返回一个Iterator[String],你只能遍历一次迭代器.调用length耗尽迭代器,因此在到达结束时后续调用lengthsize调用它,因此它显示为空:

特别重要的是要注意,除非另有说明,否则在调用方法之后永远不应使用迭代器.两个最重要的例外也是唯一的抽象方法:next和hasNext.