Я написал следующий код: ScalaКак обходить и использовать в Scala для определенной функции?
case class A(x: Int, out: List[Int])
def isIn: Int => List[Int] => Boolean =
x => l => l.filter { _ == x }.nonEmpty
def filterTest4: (Int, List[A]) => List[List[Int]] = (x, a) =>
for (l <- a; if (isIn(x)(l.out))) yield l.out
functrion filterTest4 работает прекрасно, однако использует для & выхода, который я не очень нравлюсь, и, таким образом, хотел бы видеть другой путь. Я был бы очень доволен, если бы кто-то предложил конструктивный комментарий/ответ. Пожалуйста, будьте милы и имейте в виду, я только начал писать в Scala, может быть, 3 дня назад.
Правильно, каждое выражение for-yield может быть заменено на использование 'map',' flatMap' и 'filter'. –
BTW, более сжатой версией вашего решения будет: 'a.map (_. Out) .filter (isIn (x))' –
Напоминание: 'collect' объединяет' filter' и 'map':' a .collect {case a2 if isIn (x) (a2.out) => a2.out} ' – Bruno