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}
我想我会发布一些知识,但我可以看到你把我的答案提升到了一个全新的水平。甜蜜的。。。