我有以下代码获取参数,如果它是有效的ObjectId,则将其转换为Option [ObjectId],否则返回None。
我在想它如何简化,但没有找到更好的东西。
注意:params.get(" desiredImage")是Option [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
}
}
}
答案 0 :(得分:7)
您也可以使用collect在一次操作中执行此操作:
val imageId: Option[ObjectId] = params.get("imageId") collect {
case x if ObjectId.isValid(x) => new ObjectId(x)
}
答案 1 :(得分:6)
您可以使用filter
:
val imageId: Option[ObjectId] = params.get("imageId")
.filter (ObjectId.isValid)
.map(new ObjectId(_))
答案 2 :(得分:3)
你也可以使用for comprehension:
val imageId = for ( x <- params.get("imageId") if ObjectId.isValid(x))
yield new ObjectId(x)
答案 3 :(得分:0)
对于您自己的代码,您可以选择使用case ... if
进行一些简单的删除:
val imageId: Option[ObjectId] = params.get("imageId") match {
case Some(x) if ObjectId.isValid(x) => Some(new ObjectId(x))
case _ => None
}