我想在Scala中學習一些函數式編程。用不同的字符串來映射字符串
我有這樣的地圖:
val params: Map[String, QueryMap] = Map(
"a" -> SimpleQueryVal("1"),
"b" -> ComplexQueryVal("2", "3")
)
其中QueryMap是(可能不是最好的方法):
sealed trait QueryMap
case class SimpleQueryVal(value: String) extends QueryMap
case class ComplexQueryVal(values: String*) extends QueryMap
我的結果將是具有類似的查詢參數字符串:A = 1 & b = 2 & b = 3
我嘗試了一些,但我的方法返回一個Iterator [String],即使我使用mkString,看起來很醜,我相信有一個ve簡單的做法。
def paramString(queryMap: Map[String, QueryMap]) = queryMap.keys.map { key =>
val params = queryMap(key) match {
case SimpleQueryVal(x) => "%s=%s".format(key, x)
case complexQuery: ComplexQueryVal => complexQuery.values.map { value =>
"%s=%s".format(key, value)
}
}
val result: String = params match {
case s: String => s + "&"
case s: ArrayBuffer[_] => s.mkString("&")
}
result.mkString
}
我會很感激任何想法,這將使我學到今天的東西。 :)