Bla*_*ird 1 collections scala scala-collections
我想要以下功能:采取以下参数:
def filters: Map[String, String]def queryString: Map[String, Seq[String]] (来自request.queryString)def key: String..如果queryString包含key指定的in参数,我想添加相应的值filters.
一个工作功能是:
private def getUpdatedFiltersIfQueryStringContains(filters: Map[String, String], queryString: Map[String, Seq[String]], key: String): Map[String, String] = {
var updatedFilters: Map[String, String] = filters
if (queryString.contains(key)) {
updatedFilters = updatedFilters ++ Map(key -> queryString.get(key).get.head)
}
updatedFilters
}
Run Code Online (Sandbox Code Playgroud)
这看起来很可怕,对吧?
由于if语句在Scala中返回东西,我期待更多的东西:
private def getUpdatedFiltersIfQueryStringContains(filters: Map[String, String], queryString: Map[String, Seq[String]], key: String): Map[String, String] = {
if (queryString.contains(key)) {
filters ++ Map(key -> queryString.get(key).get.head)
}
}
Run Code Online (Sandbox Code Playgroud)
但这不编译,错误是:
类型不匹配; 找到:需要的单位:Map [String,String]
你可以使用更多的monadic
queryString.get(key) map { v => filters ++ Map(key -> v.head) } getOrElse filters
哪能做到你想要的.
这是一个更惯用的实现,不使用if:
def getUpdatedFiltersIfQueryStringContains(filters: Map[String, String], queryString: Map[String, Seq[String]], key: String): Map[String, String] =
filters ++ queryString.get(key).map(key -> _.head)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |