Scalaz在NonEmptyList [MyType]中查找某种类型

时间:2014-08-04 08:52:27

标签: scala scalaz

我有一个验证类型,我传递给一个函数,在该函数中,我模式匹配成功和失败,在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的结果。我可以进一步简化吗?

1 个答案:

答案 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