概括Scala过滤器

时间:2015-04-02 15:00:51

标签: scala

如何修改此过滤器以包含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中的任何元素结尾的项目吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-2)

您可以按照以下方式执行此操作。

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

答案 2 :(得分:-2)

要理解,我会返回List[List[String]],因此我在最后添加了对flatMap的调用,并将其展平为List[String]

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