Подтвердить что ты не робот

Scala проверить, присутствует ли элемент в списке

Мне нужно проверить, присутствует ли строка в списке, и вызвать функцию, которая соответственно принимает логическое значение.

Можно ли добиться этого с помощью одного вкладыша?

Код ниже - это лучшее, что я мог бы получить:

val strings = List("a", "b", "c")
val myString = "a"

strings.find(x=>x == myString) match {
  case Some(_) => myFunction(true)
  case None => myFunction(false)
}

Я уверен, что это можно сделать с меньшим количеством кодирования, но я не знаю, как это сделать.

4b9b3361

Ответ 1

Просто используйте contains

myFunction(strings.contains(myString))

Ответ 2

И если вы не хотите использовать строгое равенство, вы можете использовать exists:


myFunction(strings.exists { x => customPredicate(x) })

Ответ 3

Еще проще!

strings contains myString

Ответ 4

это должно работать и с другим предикатом

myFunction(strings.find( _ == mystring ).isDefined)

Ответ 5

В вашем случае я бы рассмотрел использование Set, а не List, чтобы убедиться, что у вас есть только уникальные значения. если вам не нужно иногда включать дубликаты.

В этом случае вам не нужно добавлять какие-либо функции-обертки вокруг списков.

Ответ 6

Кроме того, можно реализовать 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)
  }
}