我需要检查一个字符串是否出现在列表中,并调用相应地接受一个布尔函数。
是否有可能有一个衬垫,以实现这一目标?
下面的代码是我能得到最好的:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
我敢肯定,这可以用更少的代码来做到这一点,但我不知道怎么办!
只要使用contains
myFunction(strings.contains(myString))
如果你不想使用严格的平等,你可以使用存在:
myFunction(strings.exists { x => customPredicate(x) })
更容易!
strings contains myString
这应该有不同的谓词也行
myFunction(strings.find( _ == mystring ).isDefined)
在你的情况我会考虑使用设置,而不是列表,以确保你有唯一的值。除非你需要有时包括重复。
在这种情况下,你并不需要添加列表周围的任何包装函数。
您还可以实现与contains
一个foldLeft
方法,这是相当真棒。我只是喜欢foldLeft算法。
例如:
object ContainsWithFoldLeft extends App {
val list = (0 to 10).toList
println(contains(list, 10)) //true
println(contains(list, 11)) //false
def contains[A](list: List[A], item: A): Boolean = {
list.foldLeft(false)((r, c) => c.equals(item) || r)
}
}