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] で指定されているように、空の 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
これを実現する 1 つの方法を次に示します。
Some(list).filter(_.nonEmpty).map(_.max)
于 2013-12-09T23:40:01.590 に答える
1
別の定式化は
list.headOption.map(_ => list.max)
于 2017-11-21T18:24:10.240 に答える