虽然仍然在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的功能方式执行此操作的优雅方法是什么?
答案 0 :(得分:2)
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你可以删除一些重复