2015-04-02 82 views
1

如何該過濾器修改爲包括ignoreExtensions期廣義斯卡拉過濾

val ignoreExtensions = List("css", "js")  //> ignoreExtensions : List[String] = List(css, js) 
    val links = List("test.css", "file.html")  //> links : List[String] = List(test.css, file.html) 

    links.filter(f => !f.endsWith(".css"))   //> res0: List[String] = List(file.html) 

目前,它的工作原理是硬編碼「的.css」入過濾器,但想過濾去除任何元素結尾的所有項目在List ignoreExtensions中?

+0

不應'test.css'被過濾掉嗎? – 2015-04-02 15:07:57

+0

@ m-z你的權利,問題更新。也可以使用filterNot我geuss – 2015-04-02 15:09:23

回答

2
links.filterNot(f => ignoredExtensions.exists(ext => f.endsWith(ext))) 
+1

根據mz建議我編輯了你的代碼來使用:「links.filterNot(f => ignoreExtensions.exists(ext => f.endsWith(ext)))」但答案是你的,謝謝 – 2015-04-02 15:11:27

+0

downvoters會關心說爲什麼? – Marth 2015-04-04 12:13:43

-2

你可以這樣做,如下所示。

links.filter(f => ignoreExtensions.contains(f.dropWhile(_ != '.').drop(1))) 
-2

一種理解會返回一個List[List[String]],所以我加入到flatMap通話結束時,好了,壓平,成List[String]

(for (ext <- ignoreExtensions) 
    yield (links.filter(_.endsWith(ext))) 
).flatMap(x=>x)