Scala 值为“无”的筛选器映射
我已经搜索了一些,但是还没有找到一个好的答案,关于如何过滤掉地图中任何值为None的条目。假设我有一张这样的地图: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)
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来自。