Question

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
Was it helpful?

Solution

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.

OTHER TIPS

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top