2016-09-23 54 views
0
列表

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

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

回答

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允许您提供的部分功能,将让那些部分函数中定义的任何值,并丢弃任何不是。

0

不使用get()另一种可能性是

val list = List(("FullName", Some(1)), ("FullName", None)) 

list.filter(_._2.isDefined).unzip match { 
    case (k, v) => k zip v.flatten 
}