Is there a compact way to get the head of a list as a Some when the list is non-empty, getting None otherwise?

This is what I am currently doing,

val ms = moves.filter { ...some predicate... }
if (ms.nonEmpty) Some(ms.head) else None
有帮助吗?

解决方案

Try headOption. The API docs are your friend.

Note also that find does exactly a filter plus headOption: it takes one item if there and puts it in an option, and otherwise gives None.

其他提示

The answer above is correct for this case, but where you just need to simplify the second line, I also recommend this handy utility mentioned here (adopted from Scalaz):

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

Allows this:

if (condition) Some(result) else None

to become this:

condition option result
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top