映射特定类型集合选项的最佳Scala实践
我遇到的具体案例。如何有效地处理特定类型集合的Scala选项 正如其中一个答案中提到的,使用集合选项并不是最优的,最好用空集合表示没有值。但是,这个签名是一个古怪的外部服务强迫我的 所以,举个例子。我有:映射特定类型集合选项的最佳Scala实践,scala,Scala,我遇到的具体案例。如何有效地处理特定类型集合的Scala选项 正如其中一个答案中提到的,使用集合选项并不是最优的,最好用空集合表示没有值。但是,这个签名是一个古怪的外部服务强迫我的 所以,举个例子。我有: val myData = Option[Seq[MyObj]] case class MyObj(name: String) 我想把我的数据映射到另一种类型,它是NewObj的Seq 将myData映射到不同对象的最佳实践是什么?我首先要说的是,您应该重新考虑是否需要一个集合选项。通常更倾
val myData = Option[Seq[MyObj]]
case class MyObj(name: String)
我想把我的数据映射到另一种类型,它是NewObj的Seq
将myData映射到不同对象的最佳实践是什么?我首先要说的是,您应该重新考虑是否需要一个集合选项。通常更倾向于用空集合表示没有值
myData.map(list => list.map(myObj => doThing(myObj)))
// Option[Seq[NewThing]]
但是如果您确实需要该选项,那么您可以假设转换的类型为MyObj=>MyNewObj:
首先,我想说的是,你应该重新考虑是否需要一个收藏选项。通常更倾向于用空集合表示没有值 但是如果您确实需要该选项,那么您可以假设转换的类型为MyObj=>MyNewObj: 如果给出选项[Seq[Obj]],则我将使用空的sequeunce来设置该选项:
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))
}
如果给出选项[Seq[Obj]],则我将使用空的sequeunce来设置该选项:
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))
}
我完全同意你的看法。但是,我被迫选择收藏:[古怪的外部服务]我完全同意你的看法。但是,我不得不选择收集:[古怪的外部服务]
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))
}