扩展/复制Scala集合语法来创建自己的集合?



我想建立一个映射,但是我想丢弃所有空值的键,如下所示:

@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")

最新更新