Scala方法,返回多个连接过滤器函数

时间:2010-08-04 22:04:52

标签: scala scala-2.8

在我的应用中,我正在按各种类型过滤文件数组,如下所示:

val files:Array[File] = recursiveListFiles(file)
  .filter(!_.toString.endsWith("png"))
  .filter(!_.toString.endsWith("gif"))
  .filter(!_.toString.endsWith("jpg"))
  .filter(!_.toString.endsWith("jpeg"))
  .filter(!_.toString.endsWith("bmp"))
  .filter(!_.toString.endsWith("db"))

但是定义一个采用String数组并将所有这些过滤器作为连接函数返回的方法会更加巧妙。那可能吗? 这样我就可以写了

val files:Array[File] = recursiveListFiles(file).filter(
  notEndsWith("png", "gif", "jpg", "jpeg", "bmp", "db") 
)

2 个答案:

答案 0 :(得分:10)

你可以这样做:

def notEndsWith(suffix: String*): File => Boolean = { file =>
  !suffix.exists(file.getName.endsWith)
}

答案 1 :(得分:1)

一种方式是这样的:

def notEndsWith(files:Array[File], exts:String*) = 
  for(file <- files; if !exts.exists(file.toString.endsWith(_))) yield file

可以像这样调用:

val files = Array(new File("a.png"),new File("a.txt"),new File("a.jpg"))
val filtered = notEndsWith(files, "png", "jpg").toList