从Scala中的Map.get处理选项

时间:2014-10-26 02:48:37

标签: scala option monads

我有一个Scala Map,其中包含我在HTTP请求中获得的一堆参数。

val queryParams = Map( ("keyword" -> "k"), ("from" -> "f"), ("to" -> "t"), ("limit" -> "l") ) 

我采用了一种获取所有这些参数的方法。

def someMethod( keyword: String, from: String, to: String, limit: String) = { //do something with input params }

我想将地图中的参数传递给我的方法someMethod

queryParams.get会返回Option。所以我可以为每个输入参数调用类似queryParams.get("keyword").getOrElse("")的内容。

someMethod( queryParams.get("keyword").getOrElse(""), queryParams.get("from").getOrElse(""), queryParams.get("to").getOrElse(""), queryParams.get("limit").getOrElse(""))

有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

如果所有参数都具有相同的默认值,您可以为整个地图设置default value

val queryParams = Map( ("keyword" -> "k"), ("from" -> "f"), ("to" -> "t"), ("limit" -> "l") ).withDefaultValue("")
someMethod( queryParams("keyword"), queryParams("from"), queryParams("to"), queryParams("limit"))

withDefaultValue返回一个Map,对于任何不存在的值,返回默认值。现在您确定总是得到一个值,您可以使用queryParams("keyword")(没有get函数)。