在列表Scala中验证项目的好方法

Ste*_*oom 3 validation scala list

嗨,我有一个关于在Scala中验证列表的问题。我有一个看起来像这样的方法:

def validate(item: Item): Try[Unit] = {
   if (item.isValid) Success(())
   else Failure(new isNotValidException("not valid"))
}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用这种方法来验证itemList: List[Item]如下:

def listIsValid(list: List[Item]): Try[Unit] = {
  list
    .map(validate(_))
    .collectFirst{ case f @ Failure(_: Exception) => f }
    .getOrElse(Success(()))
}
Run Code Online (Sandbox Code Playgroud)

我最终想解决的问题Try[Unit](如果所有项目均有效,则为成功,如果至少一项无效,则为失败。

这是验证列表中所有项目的好方法吗?还是有更好的方法来验证列表中的项目?它应该很快就会失败,如果一项失败了,我就不需要知道当时其他项是否无效。列表验证用于的理解,最终需要Try[Unit]再次解析为单个

nad*_*r.h 5

我会exists在Lists上使用该方法,并将此方法编写如下:

def listIsValid(list: List[Item]): Boolean = {
        list.exists(!_.isValid)
  }
Run Code Online (Sandbox Code Playgroud)

  • 函数的意义是错误的,因为如果列表中有一个无效的项目,则返回“ true”,在这种情况下应返回“ false”,而仅当所有项目均有效时才返回“ true”。因此,您可能更喜欢:list.forall(_。isValid)而不是list.exists(!_。isValid)。 (2认同)