返回链式回调列表中的第一个非 null 对象的优雅方法



当我还在开始使用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,您可以删除一些重复项

最新更新