根据 Scala 中的可选属性过滤列表

Art*_*ans 1 scala

想象一下我有以下列表,其中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.

我想知道是否有更漂亮的方法来做到这一点?

Mic*_*jac 5

是的,使用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允许您提供一个部分函数,​​该函数将保留部分函数中定义的任何值,并丢弃任何未定义的值。