What is the best way to do this:
def reduce[A](x: Option[A], y: Option[A])(f: (A, A) => A): Option[A] =
(x, y) match {
case (Some(a), Some(b)) => Some(f(a, b))
case (None, None) => None
case (_, None) => x
case (None, _) => y
}
I looked at this question but his case is slightly different from mine...
The shortest is probably
(x ++ y).reduceLeftOption(f)
which works because of an implicit conversion from Option
to Iterable
which happens to have a method that does exactly what you need.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With