Preciso verificar se uma string está presente em uma lista e chamar uma função que aceita um booleano de acordo.
É possível conseguir isso com um liner?
O código abaixo é o melhor que consegui:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
Tenho certeza que é possível fazer isso com menos codificação, mas não sei como!
E se você não quiser usar igualdade estrita, pode usar existe:
fonte
Ainda mais fácil!
fonte
isso deve funcionar também com diferentes predicados
fonte
No seu caso, eu consideraria usar Set e não List, para garantir que você tenha apenas valores únicos. a menos que você às vezes precise incluir duplicatas.
Nesse caso, você não precisa adicionar nenhuma função de wrapper nas listas.
fonte
Você também pode implementar um
contains
método comfoldLeft
, é incrível. Eu adoro algoritmos foldLeft.Por exemplo:
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) } }
fonte