Thanks to the helpful comments from @Suma, I came up with another solution in addition to the current ones:
Since the inputs are always in the form Option(x):
Iterator(Seq(o1,o2).filter(_!=None))
.takeWhile(_.length==1)
.map( x => compute(x.head.get))
.toSeq.headOption
. , .