如何简化Scala选项的使用

如何简化Scala选项的使用,scala,Scala,我有以下获取参数的代码,如果它是有效的ObjectId,则将其转换为选项[ObjectId],否则返回None 我在想如何简化它,但没有发现任何更好的方法 注意:params.get(“desiredImage”)是选项[String] val imageId: Option[ObjectId] = params.get("imageId") match { case None => None case Some(x) => { if (ObjectId.isVali

我有以下获取参数的代码,如果它是有效的ObjectId,则将其转换为选项[ObjectId],否则返回None

我在想如何简化它,但没有发现任何更好的方法

注意:params.get(“desiredImage”)是选项[String]

val imageId: Option[ObjectId] = params.get("imageId") match {
  case None => None
  case Some(x) => {
    if (ObjectId.isValid(x)) {
      Some(new ObjectId(x))
    } else {
      None
    }
  }
}

您可以使用
过滤器

val imageId: Option[ObjectId] = params.get("imageId")
       .filter (ObjectId.isValid)
       .map(new ObjectId(_))

您还可以使用collect在单个操作中完成此操作:

val imageId: Option[ObjectId] = params.get("imageId") collect { 
  case x if ObjectId.isValid(x) => new ObjectId(x) 
}

您还可以使用a进行理解:

val imageId  = for ( x <- params.get("imageId") if ObjectId.isValid(x)) 
                   yield new ObjectId(x)

val imageId=for(x对于您自己的一段代码,您有一个很好的选择,可以使用
case…将其剪切一点,如果

val-imageId:Option[ObjectId]=params.get(“imageId”)匹配{
如果ObjectId.isValid(x)=>Some(新ObjectId(x))的情况下的Some(x)
案例=>无
}

本着更少的精神,您应该能够将isValid作为
params.get(“imageId”)过滤器(ObjectId.isValid)传入
我认为您的解决方案还需要一个映射来创建ObjectId