6

リストが空でないときにリストの先頭をSomeとして取得し、それ以外の場合はNoneを取得するコンパクトな方法はありますか?

これは私が現在行っていることです、

val ms = moves.filter { ...some predicate... }
if (ms.nonEmpty) Some(ms.head) else None
4

2 に答える 2

22

試してみてくださいheadOptionAPIドキュメントはあなたの友達です。

findまた、これはまさにfilterプラスになることにも注意してくださいheadOption。ある場合は1つのアイテムを受け取り、それをオプションに入れます。それ以外の場合は。を与えNoneます。

于 2013-01-22T21:09:39.300 に答える
1

上記の答えはこの場合は正しいですが、2行目を単純化する必要がある場合は、ここで説明するこの便利なユーティリティ(Scalazから採用)もお勧めします

implicit class boolean2Option(val value: Boolean) extends AnyVal {
  def option[A](f: => A) = if (value) Some(f) else None
}

これを許可します:

if (condition) Some(result) else None

これになるために:

condition option result
于 2013-01-22T23:33:27.967 に答える