在我的应用中,我正在按各种类型过滤文件数组,如下所示:
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")
)
答案 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