我需要检查列表中是否存在字符串,并调用一个相应接受布尔值的函数。
是否可以通过一个衬垫实现这一目标?
以下代码是我能得到的最佳代码:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
我确信用较少的编码可以做到这一点,但我不知道怎么做!
答案 0 :(得分:101)
只需使用contains
myFunction(strings.contains(myString))
答案 1 :(得分:29)
如果你不想使用严格的相等,你可以使用exists:
myFunction(strings.exists { x => customPredicate(x) })
答案 2 :(得分:7)
更容易!
strings contains myString
答案 3 :(得分:2)
这也适用于不同的谓词
myFunction(strings.find( _ == mystring ).isDefined)
答案 4 :(得分:2)
在您的情况下,我会考虑使用Set而不是List,以确保您只有唯一值。除非您有时需要包含重复项。
在这种情况下,您不需要在列表周围添加任何包装函数。
答案 5 :(得分:-1)
您还可以使用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)
}
}