巧妙地处理Scala中的选项[T]
我正在使用Scala开发一些代码,并试图巧妙地解决包含一些巧妙地处理Scala中的选项[T],scala,optional,Scala,Optional,我正在使用Scala开发一些代码,并试图巧妙地解决包含一些选项[T]的集合之间的基本转换 假设我们有以下列表 val list: List[(A, Option[B])] = // Initialization stuff val transformed: List[(B, A)] 我们希望对list应用一个转换,以获得以下列表 val list: List[(A, Option[B])] = // Initialization stuff val transformed: List[(B
选项[T]
的集合之间的基本转换
假设我们有以下列表
val list: List[(A, Option[B])] = // Initialization stuff
val transformed: List[(B, A)]
我们希望对list
应用一个转换,以获得以下列表
val list: List[(A, Option[B])] = // Initialization stuff
val transformed: List[(B, A)]
对于所有计算结果为部分[B]的选项[B]
。我发现最好的方法是应用以下转换链:
val transformed =
list.filter(_.isDefined)
.map { case (a, Some(b)) => (b, a) }
然而,我觉得我错过了一些东西。处理
选项[T]
s的最佳方法是什么?您可以使用收集
:
val transformed = list.collect {
case (a, Some(b)) => (b, a)
}
按照文档中的定义,收集:
通过将分部函数应用于此列表中定义函数的所有元素来构建新集合
也就是说,它只为匹配分部函数中定义的任何情况的元素生成结果。我喜欢把它看作是一个组合的过滤器
和映射