嗨,我有一个关于在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]
答案 0 :(得分:5)
我将在列表上使用方法exists
,并按如下方式编写此方法:
def listIsValid(list: List[Item]): Boolean = {
list.exists(!_.isValid)
}
答案 1 :(得分:3)