2015-04-02 4 views
1

Как этот фильтр будет изменен, чтобы включить ignoreExtensions:Обобщить Scala фильтр

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'? –

+0

@ m-z ваше право, вопрос обновлен. Также можно использовать filterNot I geuss –

ответ

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

в соответствии с предложением mz. Я отредактировал ваш код для использования: «links.filterNot (f => ignoreExtensions.exists (ext => f.endsWith (ext)))« но ответ твой, спасибо –

+0

Будут ли downvoters заботиться о том, почему? – Marth

-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)