我正在使用Scala开发一些代码,我正在尝试巧妙地解决包含一些Option[T]
的集合之间的基本转换。
假设我们有以下列表
val list: List[(A, Option[B])] = // Initialization stuff
我们希望将转化应用于list
以获取以下列表
val transformed: List[(B, A)]
适用于评估为Option[B]
的所有Some[B]
。我发现这样做的最好方法是应用以下转换链:
val transformed =
list.filter(_.isDefined)
.map { case (a, Some(b)) => (b, a) }
然而我觉得我错过了一些东西。哪个是处理Option[T]
的最佳方式?
答案 0 :(得分:13)
您可以使用collect
:
val transformed = list.collect {
case (a, Some(b)) => (b, a)
}
收集,如文档中所定义:
通过将部分函数应用于此列表中定义函数的所有元素来构建新集合。
含义,它只为符合部分函数中定义的任何情况的元素生成结果。我想将其视为合并filter
和map
。