Scala如何避免两次读取文件

时间:2011-01-10 14:46:21

标签: scala functional-programming scala-2.8

以下是我正在处理的示例程序,用于读取每行一个值列表的文件。我必须添加所有这些值转换为double,还需要对值进行排序。这是我到目前为止所做的,它工作正常。

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()给你一个迭代器,我只能循环它一次而下一次操作它将为null,所以我不能再次重用lines进行排序,我需要再次从文件中读取。另外,我不想将它们存储到临时列表中。是否有任何优雅的方式以功能的方式这样做?

2 个答案:

答案 0 :(得分:5)

将其转换为List,以便您可以重复使用它:

val lines = Source.fromFile("c://exp.txt").getLines().toList

答案 1 :(得分:3)

根据我的评论,将其转换为列表,然后重写如下

import scala.io.Source

object Expense{

  def main(args: Array[String]): Unit = {

    val lines = Source.fromFile("c://exp.txt").getLines() map (_.replaceAll(",","").toDouble)

    val sum: Double = lines.foldLeft(0.0)((i, s) => i + s)
    println("Total => " + sum)
    println(lines.toList.sorted)

}

}