Je dois vérifier si une chaîne est présente dans une liste et appeler une fonction qui accepte un booléen en conséquence.
Est-il possible d'y parvenir avec une seule ligne?
Le code ci-dessous est le meilleur que je puisse obtenir:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
Je suis sûr qu'il est possible de faire cela avec moins de codage, mais je ne sais pas comment!
Et si vous ne souhaitez pas utiliser l'égalité stricte, vous pouvez utiliser existe:
la source
Encore plus simple!
la source
cela devrait également fonctionner avec un prédicat différent
la source
Dans votre cas, j'envisagerais d'utiliser Set et non List, pour m'assurer que vous n'avez que des valeurs uniques. sauf si vous devez parfois inclure des doublons.
Dans ce cas, vous n'avez pas besoin d'ajouter de fonctions wrapper autour des listes.
la source
Vous pouvez également implémenter une
contains
méthode avecfoldLeft
, c'est assez génial. J'adore les algorithmes foldLeft.Par exemple:
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) } }
la source