Ответ 1
Просто используйте contains
myFunction(strings.contains(myString))
Мне нужно проверить, присутствует ли строка в списке, и вызвать функцию, которая соответственно принимает логическое значение.
Можно ли добиться этого с помощью одного вкладыша?
Код ниже - это лучшее, что я мог бы получить:
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))
И если вы не хотите использовать строгое равенство, вы можете использовать exists:
myFunction(strings.exists { x => customPredicate(x) })
Еще проще!
strings contains myString
это должно работать и с другим предикатом
myFunction(strings.find( _ == mystring ).isDefined)
В вашем случае я бы рассмотрел использование Set, а не List, чтобы убедиться, что у вас есть только уникальные значения. если вам не нужно иногда включать дубликаты.
В этом случае вам не нужно добавлять какие-либо функции-обертки вокруг списков.
Кроме того, можно реализовать 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)
}
}