java - 如何从 Option[Map[String,Seq[String]]] 中知道是否包含键?

标签 java scala dictionary collections playframework

我想知道 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 带有一个关键参数(例如在 map 上),而实际上你是在 Option 上调用 get (这是一个不安全的操作——你应该远离从 getOption 基本上总是),然后 apply 在生成的 map 上(也是不安全的)。这种困惑是 Scala 的错,而不是你的错,但你仍然希望避免介入其中。

相反,您可以在 Option 上使用 exists 并在 map 上使用 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 为非空且 map 包含该 key 。

关于java - 如何从 Option[Map[String,Seq[String]]] 中知道是否包含键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204907/

相关文章:

java - java中final方法和其他方法的区别

java - 使用 asm Instrumentation 测量 java 程序运行时间

java - OpenGL ES 2.0 vbo 白屏

Scala:声明 Any => Nothing 类型的延续时出现编译错误

scala - 如何使用模式匹配检查列表是否包含全部 Some 或 None 或两者?

r - map() 中是否有 "next"等效项

Java 构造函数帮助

Scala 右关联方法

java - HashMap 值未附加到 ListView

python - 如何在python字典中获取值的键?