如何知道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包含该键。