2016-09-23 49 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 
}