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
.
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
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