想象一下,我有以下列表,其中Tuple
第二个arg是可选的
List(Tuple("FullName", Some(1)), Tuple("FullName", None))
获得以下结果的最简洁方法是什么?
List(Tuple("FullName", 1))
我可以试试
list.filter(_._2.isDefined).map((_._1, _._2.get))
我需要过滤掉第二个参数为None
的所有元组,然后将元组类型更改为包含已定义的integer
而不是option
。
我想知道是否有更漂亮的方法吗?
答案 0 :(得分:4)
是的,使用collect
和模式匹配。
val list = List(("FullName", Some(1)), ("FullName", None))
scala> list collect { case (name, Some(i)) => (name, i) }
res0: List[(String, Int)] = List((FullName,1))
collect
允许您提供一个部分函数,该函数将保留在partial函数中定义的任何值,并丢弃任何不在的部分函数。
答案 1 :(得分:0)
另一种不使用get()
的可能性可能是
val list = List(("FullName", Some(1)), ("FullName", None))
list.filter(_._2.isDefined).unzip match {
case (k, v) => k zip v.flatten
}