用于获取列表头部的紧凑语法作为选项

时间:2013-01-22 21:05:14

标签: scala scala-option

当列表非空时,有没有一种简洁的方法可以将列表的头部作为一个列表,否则会得到无效?

这就是我目前正在做的事情,

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

2 个答案:

答案 0 :(得分:20)

试试headOptionAPI docs是你的朋友。

另请注意,find完全相同filter加上headOption:如果存在并将其放入选项中,则需要一个项目,否则会None

答案 1 :(得分:1)

上面的答案对于这种情况是正确的,但是你只需要简化第二行,我也推荐这个方便的实用程序mentioned here(从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