从选项类型中获取价值的最佳和安全做法?

Mun*_* Ar 0 types scala list option scala-collections

考虑到最佳实践,我试图在 Option 中获取值。例如,我有:

val listExample : List[Option[String]] = List(Some("A"), Some("B))
Run Code Online (Sandbox Code Playgroud)

我想访问AB 一种方式,正在做listExample.head.get = "A"listExample.last.get = "B"

但这不是一个好习惯。怎么办:listExample.headOption.flatten.ToString 这安全吗?

zig*_*tar 5

没有好的答案。

简单地使用.get?

问题“如何从期权中获取价值?”的答案 就是简单地使用get。这是确定获得价值的唯一方法。get真的很努力地把它从Option; 您将始终以常规程序流程中的价值结束。这是因为,如果 的任务get是不可能的,那么您的本地程序流将被终止Exception

大多数人都会同意避免get避免Exception,这通常会导致难以推理的非本地程序行为。

但是你会做什么而不是简单地“get从一个Option”中获取一个值呢?这取决于在以下情况下会发生什么None- 而不是Exception

否则,这取决于……

例如,如果您有 aList[Option[A]]并且想要 a List[A],只需忽略这些None值,然后执行Option.flatten

如果您希望仅在存在值时发生副作用(可能取决于该值),请使用Option.foreach.

如果您想获取值(如果存在),或者在存在时获取默认值None,请使用Option.getOrElse.

这个列表可以通过flatMapmapfoldexistsforallfilterorElse、 等等来制作更长的时间。

因此,您问题的最终答案是:这取决于……

  • 我猜还有 getOrElse 吗? (2认同)