基于Scala中的可选属性筛选列表
假设我有下面的列表,其中基于Scala中的可选属性筛选列表,scala,Scala,假设我有下面的列表,其中Tuplesecondarg是可选的 List(Tuple("FullName", Some(1)), Tuple("FullName", None)) 获得以下结果的最干净方法是什么 List(Tuple("FullName", 1)) 我可以试试 list.filter(_._2.isDefined).map((_._1, _._2.get)) 我需要过滤掉第二个参数为None的所有元组,然后将元组类型更改为包含定义的整数,而不是选项 我想知道是否有一种更漂亮
Tuple
secondarg是可选的
List(Tuple("FullName", Some(1)), Tuple("FullName", None))
获得以下结果的最干净方法是什么
List(Tuple("FullName", 1))
我可以试试
list.filter(_._2.isDefined).map((_._1, _._2.get))
我需要过滤掉第二个参数为None
的所有元组,然后将元组类型更改为包含定义的整数
,而不是选项
我想知道是否有一种更漂亮的方法可以做到这一点?是的,使用
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
允许您提供一个分部函数,该函数将保留分部函数中定义的任何值,并丢弃任何未定义的值 是,使用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
允许您提供一个分部函数,该函数将保留分部函数中定义的任何值,并丢弃任何未定义的值 另一种不使用get()
的可能性是
val list = List(("FullName", Some(1)), ("FullName", None))
list.filter(_._2.isDefined).unzip match {
case (k, v) => k zip v.flatten
}
另一种不使用
get()
的可能是
val list = List(("FullName", Some(1)), ("FullName", None))
list.filter(_._2.isDefined).unzip match {
case (k, v) => k zip v.flatten
}