如何知道Option ]]是否包含密钥?

我想知道request.body.asFormUrlEncoded包含deviceId

 val formValues=request.body.asFormUrlEncoded val number = formValues.get("mobile").head var deviceId ="deviceIdNotFound" if(condtion) //thats the problem deviceId= formValues.get("deviceId").head 

对于Option[Map[String,Seq[String]]]有任何conatins或任何其他函数的方法吗?

我强烈建议你不要使用formValues.get("whatever") ,部分原因是因为语法非常混乱 – 看起来你正在使用一个关键参数调用get (例如在地图上),当真的你正在打电话Option (这是一个不安全的操作 – 你应该总是远离Option ),然后apply生成的地图(也是不安全的)。 这种混乱是Scala的错,不是你的错,但你仍然想避免踩到它。

相反,您可以使用Option上的exists和地图上的contains 。 这是一个略微简化的例子:

 val containsKey = formValues.exists(_.contains(key)) 

仅当Option为非空其包含的映射具有键时,才会返回true

更好的方法是避免像这样的if语句:

 val os: Option[Seq[String]] = for { m <- formValues v <- m.get(key) } yield v os.foreach { v => \\ do something with the value } 

这里我们最终得到一个Option ,它包含key指向的值,如果原始Option是非空的并且map包含该键。