6

当列表非空时,是否有一种紧凑的方法可以将列表的头部作为 Some ,否则获取 None ?

这是我目前正在做的,

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

2 回答 2

22

试试headOptionAPI 文档是您的朋友。

另请注意,这find确实是一个filter加号headOption:如果存在则将一个项目放入选项中,否则给出None.

于 2013-01-22T21:09:39.300 回答
1

上面的答案对于这种情况是正确的,但是您只需要简化第二行,我还推荐这里提到的这个方便的实用程序(从 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
于 2013-01-22T23:33:27.967 回答