2016-03-28 22 views
0

これは、ディレクトリ内のすべてのクラスファイル名を返すScalaコードです。Scalaのシーケンスコレクション

import scala.collection.mutable._ 
import java.io.File 

def getFiles(directory:String) = { 
    val files = ArrayBuffer[String]() 
    val d = new File(directory) 
    if (d.exists && d.isDirectory) { 
     (for (i <- d.listFiles.filter(_.getName.endsWith(".class"))) // <--- 
      yield i.getName.replace(directory, "")).toList 
    } else { 
     List[String]() 
    } 
} 

listFiles方法は、ファイルの種類のクラスのコレクションを返し、私は文字列の新しいコレクションを取得するためにforyieldを使用する必要がありました。私はコードが醜いと思うし、このコードのようなこのパターン(既存のものから新しいタイプのコレクションを生成する)には良い方法があるかもしれませんが、私はそれにエラーメッセージがあります。

d.listFiles.filter(_.getName.endsWith(".class"))) 
.foreach(yield _.getName.replace(directory, "")).toList 

答えて

4

あなたが探しているのは.map(...)ですか? =)

私はそれを行うための正しい方法は

d.listFiles.filter(...).map(_.getName.replace(directory, "")).toList 
だろう見るものから