当我还在开始使用Scala时,我偶然发现了一个函数算法问题。考虑以下表达式:
def myMethod(parentObject: ParentClass) : Option[Smtg] = {
// Case 1
parentObject.childObject.propertyObjectA.flatmap(_.propertychildA1)
// Case 2
parentObject.childObject.propertyObjectB.flatmap(_.propertychildB2)
// Case 3
parentObject.childObject.propertyObjectC.flatmap(_.propertychildC3)
}
如果不是空,我需要返回propertychildA1
,否则propertychildB2
如果不是空,否则propertychildC3
在 Scala 的函数式方式中,有什么优雅的方式可以做到这一点?
def myMethod(parentObject: ParentClass): Option[_] = {
val childObject = parentObject.childObject
lazy val a = childObject.propertyObjectA.flatMap(p => Option(p.propertychildA1))
lazy val b = childObject.propertyObjectB.flatMap(p => Option(p.propertychildB2))
lazy val c = childObject.propertyObjectC.flatMap(p => Option(p.propertychildC3))
a orElse b orElse c
}
OFC,您可以删除一些重复项