想象一下我有以下列表,其中Tuple第二个参数是可选的
List(Tuple("FullName", Some(1)), Tuple("FullName", None))
Run Code Online (Sandbox Code Playgroud)
获得以下结果的最干净的方法是什么?
List(Tuple("FullName", 1))
Run Code Online (Sandbox Code Playgroud)
我可以尝试
list.filter(_._2.isDefined).map((_._1, _._2.get))
Run Code Online (Sandbox Code Playgroud)
我需要过滤掉第二个参数所在的所有元组None,然后更改元组类型以包含已定义的integer而不是option.
我想知道是否有更漂亮的方法来做到这一点?
是的,使用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))
Run Code Online (Sandbox Code Playgroud)
collect允许您提供一个部分函数,该函数将保留部分函数中定义的任何值,并丢弃任何未定义的值。