List.max
根据某些排序返回列表的“最大”元素......但如果列表为空,您将收到java.lang.UnsupportedOperationException: empty.max
异常。我真的不喜欢用 if 语句或匹配或其他东西乱扔代码。我想要类似headOption
for 的东西max
,但我没有看到这样的方法。获得等价物的最优雅方法是list.maxOption
什么?
问问题
8455 次
5 回答
16
您可以将 Try 转换为 Option:
Try(empty.max).toOption
您还可以使用 reduceOption (如在scala - Min/max with Option[T] for possible empty Seq? 中给出的?):
l.reduceOption(_ max _)
于 2013-12-09T22:40:30.010 回答
14
或者自己写:
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
于 2013-12-09T23:45:46.227 回答
8
这是实现它的一种方法:
Some(list).filter(_.nonEmpty).map(_.max)
于 2013-12-09T23:40:01.590 回答
1
另一种表述是
list.headOption.map(_ => list.max)
于 2017-11-21T18:24:10.240 回答