Булева обратная проблема scala - PullRequest
0 голосов
/ 24 апреля 2020

Привет. Я пытаюсь получить в качестве возврата только true или false, но мне чего-то не хватает

def filterOut[T](p: T => Boolean, as: List[T]): List[T] = {
  as.foldLeft(List[T]())((out, x) => 
                         if (p(x)) {x::out} else {out}
                        )}

Где p - предикат. Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 27 апреля 2020

Требуется ли вам использовать foldLeft()?

def atLeastOne[T](p: T => Boolean, as: Seq[T]): Boolean =
  as.foldLeft(false)(_ || p(_))

Или вам разрешено быть более прямым?

def atLeastOne[T](p: T => Boolean, as: Seq[T]): Boolean =
  as exists p

Тестирование:

atLeastOne((x:Int) => x > 57, List(3,11,71,43,5))          //res0: Boolean = true
atLeastOne[Char]('w'.==, "abcdef")                         //res1: Boolean = false
atLeastOne[String](_.isEmpty, "this-and--that".split("-")) //res2: Boolean = true
atLeastOne[Float](_ < 1F, Vector())                        //res3: Boolean = false
...