【问题标题】:Chaining multiple predicates for filter in scala在scala中为过滤器链接多个谓词
【发布时间】:2020-06-05 08:59:54
【问题描述】:

我是函数式编程的新手。我想为过滤器链接多个谓词。

假设我有想要过滤的名称列表...

 val names = List("cat","dog","elephant")


 //Currently I am doing like this, this is not dynamic,The list of name will come dynamically
 objects.filterSubjects(string => {
    string.endsWith("cat") ||   string.endsWith("dog") ||   string.endsWith("elephant")
  })

如何使上面的行动态化,这样我就不用写了。我想根据用户提供的名字列表来创建它。

【问题讨论】:

    标签: scala functional-programming predicate


    【解决方案1】:

    您可以使用exists 检查集合中的任何值是否满足某个谓词(或在每个元素的谓词上)或使用forall 检查是否为所有值满足谓词 id(AND 在每个元素的谓词上) )。

    你可以像这样使用它:

    val names = List("cat", "dog", "elephant")
    val predicate = (s: String) => names.exists(s.endsWith _)
    objects.filter(predicate)
    

    【讨论】:

    • 我认为没有下划线也可以工作:names.exists(s.endsWith)
    【解决方案2】:

    您可以使用exists 来检查您的动态列表names 是否有这样的值。

    val names = List("cat","dog","elephant")
    val objects = List("stringcat", "dog", "dognot")
    
    objects.filter(string => {
        names.exists(n => string.endsWith(n))
    })
    // List(stringcat, dog)
    

    (https://scastie.scala-lang.org/mgzlIGfHTRaN28TEetM5DA)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2015-01-21
      相关资源
      最近更新 更多