以下是我正在研究的示例程序,用於讀取每行包含一個值列表的文件。我必須將所有這些值轉換爲double,並且還需要對值進行排序。這是我到目前爲止,它工作正常。Scala如何避免兩次讀取文件
import scala.io.Source
object Expense{
def main(args: Array[String]): Unit = {
val lines = Source.fromFile("c://exp.txt").getLines()
val sum: Double = lines.foldLeft(0.0)((i, s) => i + s.replaceAll(",","").toDouble)
println("Total => " + sum)
println((Source.fromFile("c://exp.txt").getLines() map (_.replaceAll(",", "").toDouble)).toList.sorted)
}
}
這裏的問題是,你可以看到我正在閱讀文件兩次,我想避免它。由於Source.fromFile("c://exp.txt").getLines()
爲您提供了一個迭代器,因此我只能遍歷它一次,下一次操作它將爲空,因此我不能再次使用lines
進行排序,並且需要再次從文件讀取。我也不想將它們存儲到臨時列表中。有沒有以功能性的方式做到這一點的優雅方式?
你已經創建了一個隱式列表,那麼爲什麼你不想使用它呢?另外,我可能會考慮在地圖上替換一次,然後在該列表上進行後續工作。否則,你也要做兩次replaceAll函數。 – Mikezx6r 2011-01-10 15:01:16