根据多个包含过滤一个List

时间:2014-11-10 11:31:39

标签: list scala collections filter scala-collections

我想过滤List,如果字符串包含.jpg.jpeg.png,我只想保留一个字符串:

scala>  var list = List[String]("a1.png","a2.amr","a3.png","a4.jpg","a5.jpeg","a6.mp4","a7.amr","a9.mov","a10.wmv")
list: List[String] = List(a1.png, a2.amr, a3.png, a4.jpg, a5.jpeg, a6.mp4, a7.amr, a9.mov, a10.wmv)

我发现.contains不会帮助我!

必需的输出:

List("a1.png","a3.png","a4.jpg","a5.jpeg")

3 个答案:

答案 0 :(得分:15)

使用filter方法。

list.filter( name => name.contains(pattern1) || name.contains(pattern2) )

如果您有未定义的扩展数量:

val extensions = List("jpg", "png")
list.filter( p => extensions.exists(e => p.matches(s".*\\.$e$$")))

答案 1 :(得分:3)

为什么不使用filter()执行选择/谓词的相应功能?

e.g。

list.filter(x => x.endsWith(".jpg") || x.endsWith(".jpeg")

答案 2 :(得分:3)

选择包含任意数量扩展名的任何内容:

list.filter(p => extensions.exists(e => p.contains(e)))

@SergeyLagutin上面说的是什么,但我想我已经指出它不需要matches