如何简化Scala选项的使用
我有以下获取参数的代码,如果它是有效的ObjectId,则将其转换为选项[ObjectId],否则返回None 我在想如何简化它,但没有发现任何更好的方法 注意:params.get(“desiredImage”)是选项[String]如何简化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
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