リストが空でないときにリストの先頭をSomeとして取得し、それ以外の場合はNoneを取得するコンパクトな方法はありますか?
これは私が現在行っていることです、
val ms = moves.filter { ...some predicate... }
if (ms.nonEmpty) Some(ms.head) else None
リストが空でないときにリストの先頭をSomeとして取得し、それ以外の場合はNoneを取得するコンパクトな方法はありますか?
これは私が現在行っていることです、
val ms = moves.filter { ...some predicate... }
if (ms.nonEmpty) Some(ms.head) else None
試してみてくださいheadOption
。APIドキュメントはあなたの友達です。
find
また、これはまさにfilter
プラスになることにも注意してくださいheadOption
。ある場合は1つのアイテムを受け取り、それをオプションに入れます。それ以外の場合は。を与えNone
ます。
上記の答えはこの場合は正しいですが、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