Мне нужно проверить, присутствует ли строка в списке, и вызвать функцию, которая соответственно принимает логическое значение.
Можно ли добиться этого с помощью одного лайнера?
Код ниже - лучшее, что я мог получить:
val strings = List("a", "b", "c")
val myString = "a"
strings.find(x=>x == myString) match {
case Some(_) => myFunction(true)
case None => myFunction(false)
}
Я уверен, что это можно сделать с меньшим количеством кода, но я не знаю как!
И если вы не хотите использовать строгое равенство, вы можете использовать exists:
источник
Еще проще!
источник
это должно работать также с другим предикатом
источник
В вашем случае я бы подумал об использовании 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) } }
источник