我有一个验证类型,我传递给一个函数,在该函数中,我模式匹配成功和失败,在Failure块中,我想从NonEmptyList中看到是否存在某种类型,如果是,我想回复其他的假。
我有点写了,但我觉得它可以简化。
def checkTypeVaialble(param: V[Param]): Boolean = param match {
case Success(succ) => false
case Failure(fail) => {
val bools = fail.map {
case MyTypeA => true
case _ => false
}
val filtered = bools.list.filter(x => x == true)
if(!filtered.isEmpty) true else false
}
}
有更简单的方法吗?我所做的是将所有失败映射到布尔列表中,我将布尔值列表过滤为true,并返回isEmpty的结果。我可以进一步简化吗?
答案 0 :(得分:1)
使用collect或collectFirst应该有效:
def checkTypeVaialble(param: V[Param]): Boolean = param match {
case Success(succ) => false
case Failure(fail) => fail.collectFirst{ case m:MyTypeA => true}.isDefined;
}
或者,您可以使用带模式匹配的存在:
def checkTypeVaialble(param: V[Param]): Boolean = param match {
case Success(succ) => false
case Failure(fail) => fail.exists{ case m:MyTypeA => true; case _ => false};
}
请注意,collect
已经忽略了匹配失败的情况。但是,对于exists
,您需要提供匹配所有情况,否则您将获得MatchError