Scala 值为“无”的筛选器映射

Scala 值为“无”的筛选器映射,scala,functional-programming,hashmap,filtering,Scala,Functional Programming,Hashmap,Filtering,我已经搜索了一些,但是还没有找到一个好的答案,关于如何过滤掉地图中任何值为None的条目。假设我有一张这样的地图: val map = Map[String, Option[Int]]("one" -> Some(1), "two" -> Some(2), "three" -> None) 最后,我想返回一个只包含(“一”,一些(1)

我已经搜索了一些,但是还没有找到一个好的答案,关于如何过滤掉地图中任何值为None的条目。假设我有一张这样的地图:

val map = Map[String, Option[Int]]("one" -> Some(1), 
                                   "two" -> Some(2), 
                                   "three" -> None)

最后,我想返回一个只包含
(“一”,一些(1))
(“两”,一些(2))
对的映射。我知道当你有一个列表时,这是通过展平来完成的,但是我不知道如何在地图上实现效果,而不将其拆分为键和值,然后尝试重新加入它们。

与scala.collection命名空间中的每种集合类型一样,
映射
定义了
过滤器
方法,
选项
定义了
方法,对于
部分
为true,对于
为false
。通过组合这两个值,可以过滤掉
None
值:

scala> map.filter(_._2.isDefined)
res4: scala.collection.immutable.Map[String,Option[Int]] = Map(one -> Some(1), two -> Some(2))

如果要筛选出
None
值,那么您最好同时提取
一些
值,最后得到一个
映射[String,Int]

scala> map.collect { case (key, Some(value)) => (key, value) }
res0: scala.collection.immutable.Map[String,Int] = Map(one -> 1, two -> 2)
map.filterKeys(map()!=None)


for((k,v)y!=None})

Neato。不过,我不会猜到语法。关于
我的理解是,我们告诉它转到第一(当前)对的第二项(值)?@KChaloux在这种情况下
指的是传递给
filter
方法的函数文本的第一个参数。它是
x=>x的缩写。定义了
,并且2来自。