我正试图找到一种更优雅,更简洁的方式来逐行读取文件并调用函数 到达文件末尾时。这是我目前的实施:
val source = scala.io.Source.fromFile("data.txt")
for(line <- source.getLines())
{
// do something with data
println(line)
}
// end of file reached do something else
doSomethingWithAllDataLoaded()
在这里,我需要更少的迭代并运行此文件并发读取,最后在每个文件末端调用回调函数。
答案 0 :(得分:0)
您可以像这样阅读更多Scala风格的文件:
val source = scala.io.Source.fromFile("data.txt")
source.getLines.foreach(println(_))
要并行处理行,请考虑parallel collections。这看起来像这样:
source.getLines.toList.par.foreach(println(_))
但请记住,这样您首先从文件中读取所有行,然后开始并行处理它们。
希望这有帮助
修改强>:
如果您想避免在内存中加载文件 - 只需使用Source.fromFile(...).getLines
即可。它返回一个已经很懒的Iterator[String]
。更重要的是,您不应使用.toList
或类似内容来避免内存问题。像这样的方法会破坏Iterator
和强制严格(非懒惰,渴望)集合的所有懒惰。