【问题标题】:filter a List according to multiple contains根据多个包含过滤列表
【发布时间】:2015-01-06 16:46:40
【问题描述】:

我想过滤一个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")

【问题讨论】:

  • 根据您的需要,您似乎需要包含以结尾的字符串(而不是包含)这些扩展。示例:jpg.txt

标签: list scala collections filter scala-collections


【解决方案1】:

使用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$$")))

【讨论】:

    【解决方案2】:

    为什么不将filter() 与执行选择/谓词的适当函数一起使用?

    例如

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

    等等

    【讨论】:

      【解决方案3】:

      要选择包含任意数量的扩展之一的任何内容:

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

      这是@SergeyLagutin 上面所说的,但我想我会指出它不需要matches。

      【讨论】:

        猜你喜欢
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-27
        • 2021-01-08
        • 2017-12-08
        • 1970-01-01
        相关资源
        最近更新 更多