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

时间:2019-05-14 13:03:46

标签: scala list validation

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

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

现在我正在使用此方法来验证itemList: List[Item],如下所示:

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

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

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

2 个答案:

答案 0 :(得分:5)

我将在列表上使用方法exists,并按如下方式编写此方法:

def listIsValid(list: List[Item]): Boolean = {
        list.exists(!_.isValid)
  }

答案 1 :(得分:3)

如果要检查序列中的每个元素是否都满足谓词,请使用forall

list.forall(_.isValid)

有关更多详细信息,请检查forall documentation