Necesito verificar si una cadena está presente en una lista y llamar a una función que acepte un booleano en consecuencia.
¿Es posible lograr esto con una sola línea?
El siguiente código es el mejor que pude obtener:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
Estoy seguro de que es posible hacer esto con menos codificación, ¡pero no sé cómo!
Y si no desea utilizar la igualdad estricta, puede utilizar existe:
fuente
¡Aún más fácil!
fuente
esto debería funcionar también con diferentes predicados
fuente
En su caso, consideraría usar Set y no List, para asegurarme de que solo tiene valores únicos. a menos que a veces necesite incluir duplicados.
En este caso, no es necesario agregar funciones contenedoras en las listas.
fuente
También puedes implementar un
contains
método confoldLeft
, es bastante impresionante. Me encantan los algoritmos foldLeft.Por ejemplo:
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) } }
fuente