我想建立一个映射,但是我想丢弃所有空值的键,如下所示:
@tailrec
def safeFiltersMap(
map: Map[String, String],
accumulator: Map[String,String] = Map.empty): Map[String, String] = {
if(map.isEmpty) return accumulator
val curr = map.head
val (key, value) = curr
safeFiltersMap(
map.tail,
if(value.nonEmpty) accumulator + (key->value)
else accumulator
)
}
现在这很好,但是我需要像这样使用它:
val safeMap = safeFiltersMap(Map("a"->"b","c"->"d"))
而我想像实例化map那样使用它:
val safeMap = safeFiltersMap("a"->"b","c"->"d")
我可以遵循什么语法来实现这一点?
->
语法不是Scala中的特殊语法。它实际上是构造二元组的一种奇特方式。所以你也可以写自己的2元组函数。您不需要定义新的Map
类型。您只需要一个函数来过滤现有的。
def safeFiltersMap(args: (String, String)*): Map[String, String] =
Map(args: _*).filter {
result => {
val (_, value) = result
value.nonEmpty
}
}
然后使用
调用safeFiltersMap("a"->"b","c"->"d")