14

List.max順序付けに基づいてリストの「最大」要素を返します...ただし、リストが空の場合はjava.lang.UnsupportedOperationException: empty.max例外が発生します。if ステートメントやマッチなどでコードをポイ捨てするのはあまり好きではありません。headOptionforのようなものが欲しいのですmaxが、そのような方法は見当たりません。に相当するものを取得する最もエレガントな方法は何list.maxOptionですか?

4

5 に答える 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 に答える