我遇到的具体情况。如何有效处理特定类型集合的Scala选项?
正如其中一个答案中所提到的,使用Collection的Option
并不是最优的,最好用空集合来表示缺少值。但是,这个签名是古怪的外部服务的力量。
所以,举个例子。我有:
val myData = Option[Seq[MyObj]]
case class MyObj(name: String)
我想将myData
映射到NewObj
的Seq的其他类型。
val newData: Seq[NewObj] = myData.XXX
将myData
映射到不同对象的最佳做法是什么?
答案 0 :(得分:3)
我首先要说你应该重新考虑一个Option
集合的需要。通常优选的是简单地用空集合表示缺少值。
但如果你真的需要Option
,那么假设transform
类型为(MyObj) => MyNewObj
,你可以这样做:
val nyNewData: Option[Seq[MyNewObj]] = myData.map(_.map(transform))
答案 1 :(得分:2)
如果给出Option[Seq[Obj]]
,我getOrElse
选项会出现空的后续行为:
object NewTest {
case class MyObj(name: String)
case class OtherObj(name: String, hash: Int)
def main(args: Array[String]): Unit = {
val myData: Option[Seq[MyObj]] = Some(Seq(MyObj("a")))
val transformed: Seq[OtherObj] =
myData
.getOrElse(Seq.empty[MyObj])
.map(obj => OtherObj(obj.name, obj.name.hashCode))
}
答案 2 :(得分:0)
myData.map(list => list.map(myObj => doThing(myObj)))
// Option[Seq[NewThing]]