nai*_*rbv 10 functional-programming scala
List.max根据某些排序返回列表中的"最大"元素...但如果列表为空,则会得到一个java.lang.UnsupportedOperationException: empty.max.我真的不喜欢用if语句或匹配或其他任何东西乱抛垃圾代码.我想要最大的headOption之类的东西,但我没有看到这样的方法.获得list.maxOption等效的最优雅方法是什么?
Rob*_*ier 13
您可以将Try转换为选项:
Try(empty.max).toOption
Run Code Online (Sandbox Code Playgroud)
你也可以使用reduceOption(在scala中给出- 最小/最大,选项[T]可能是空的Seq?):
l.reduceOption(_ max _)
Run Code Online (Sandbox Code Playgroud)
dhg*_*dhg 12
或者自己写:
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
Run Code Online (Sandbox Code Playgroud)
从Scala 2.13, minOption/开始maxOption现在是标准库的一部分:
List(34, 11, 98, 56, 43).maxOption // Option[Int] = Some(98)
List[Int]().maxOption // Option[Int] = None
Run Code Online (Sandbox Code Playgroud)