List.max
returns the "largest" element of a list based on some ordering... But if the list is empty you'll get a java.lang.UnsupportedOperationException: empty.max
exception. I don't really like littering code with if statements or matches or whatever. I want something like headOption
for max
, but I'm not seeing such a method. What's the most elegant way to get the equivalent of list.maxOption
?
You can convert a Try into an Option:
Try(empty.max).toOption
You can also use reduceOption (as given in scala - Min/max with Option[T] for possibly empty Seq?):
l.reduceOption(_ max _)
Or write your own:
implicit class WithMaxOption[T: Ordering](self: Seq[T]) {
def maxOption() = if(self.isEmpty) None else Some(self.max)
}
List(1,2,3).maxOption // Some(3)
List[Int]().maxOption // None
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