在 Scala 中为过滤器链接多个谓词

Chaining multiple predicates for filter in scala

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

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

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

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

您可以使用 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)

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

您可以像这样使用它:

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