给定要读取和处理的文件名集合,例如,
val inFilenames = (1 to 100).map(n => s"file$n.txt")
如何同时阅读所有100
文本文件,以便
def processFile[A](inFilename: String, f: => A): Int
可以同时调用100
次?
非常感谢
答案 0 :(得分:3)
似乎可以使用Future
s解决一些问题:
def processFile[A](inFilename: String, f: => A): Int = ???
def someFunction[A]: A = ???
val inFilenames = (1 to 100).map { n => s"file$n.txt" }
val futures: List[Future[Int]] =
inFilenames.map(file => Future(processFile(file, someFunction))).toList
这将创建一个List
,其中包含100 Future
秒。期货在声明后立即开始运行,以检索结果,您可以使用onCallback
添加Await.result(futures)
方法或块(未建议),它将以更紧凑的形式出现:
inFilenames.map(file => Future(processFile(file, someFunction)).onComplete {
case Success(res) => println(res)
case Failure(e) => println("failure: " + e.getMessage)
})