Scala语法,用于访问选项内联和链的属性;OrElse“什么;?

Scala语法,用于访问选项内联和链的属性;OrElse“什么;?,scala,Scala,有时,我想返回包装在选项中的对象的属性值,但使用getValue.orElse(otherValue)无法轻松返回 例如,我正在内联映射属性,我想使用类似于object.get.property.orElse(“”)的模式。但是前面的代码不能编译。如何访问该属性并仍然保持类似选项的语法?使用map()来保持类似选项的模式 例如,您需要获取字段对象的名称属性。但如果字段实际上是None,则可以返回一个空白字符串。像这样: field.map(u.name).getOrElse(“”) 在更大的范围

有时,我想返回包装在选项中的对象的属性值,但使用
getValue.orElse(otherValue)
无法轻松返回

例如,我正在内联映射属性,我想使用类似于
object.get.property.orElse(“”)
的模式。但是前面的代码不能编译。如何访问该属性并仍然保持类似选项的语法?

使用
map()
来保持类似选项的模式

例如,您需要获取
字段
对象的
名称
属性。但如果字段实际上是
None
,则可以返回一个空白字符串。像这样:

field.map(u.name).getOrElse(“”)

在更大的范围内使用它:

implicit def castDraftModel(drafts:List[Tuple2[models.ReportInstance,Option[models.Report]]]) = drafts.map{
    (field) => 
      List(Field(
        field._1.id, 
        field._1.teamId, 
        field._2.map(_.name).getOrElse(""), 
        field._1.lastModifiedRelative, 
        field._2.map(_.id).getOrElse(0L), 
        field._2.map(_.reportType).getOrElse(""), 
        field._1.referenceId, 
        field._1.referenceName( draft._2.map(_.reportType).getOrElse("") ) ))
  }.flatten.sortBy(_.id)
您可以使用
map()
来实现这一点。一旦您开始考虑
选项[T]
就很明显了,就像一个
T
类型的容器可以容纳0或1个元素:

case class Person(name: String, age: Int)

val optionalPerson = Some(Person("John", 29))
val name = optionalPerson map {_.name} getOrElse "?"
此外,如果您的嵌套结构为
Option
s:

case class Person(name: String, age: Int, parent: Option[Person])
您可以使用
flatMap
提取嵌套的
选项

val optionalPerson = Some(Person("John", 29, Some(Person("Mary", 55, None))))
val parentName = optionalPerson flatMap {_.parent} map {_.name} getOrElse "Unknown parent name"  //Mary
或者,当包装在
Some
中的值不满足某些条件时,可以使用
filter()
Some()
转换为
None

val nameIfAdult = optionalPerson filter {_.age >= 18} map {_.name}

我想我会发布一些知识,但我可以看到你把我的答案提升到了一个全新的水平。甜蜜的。。。