假设我有一个val allStrs: Seq[Option[String]] = Seq(Some("A"), Some("B"), None)并希望有这样的结果:Seq("A", "B"),最优雅的/Scala方法是什么?我有一个方法是allStrs.filter(_.isDefined).flatten,它是最好的方法吗?
val allStrs: Seq[Option[String]] = Seq(Some("A"), Some("B"), None)
Seq("A", "B")
allStrs.filter(_.isDefined).flatten
bxjv4tth1#
正如评论中提到的,这将奏效:
val allStrs: Seq[Option[String]] = ??? val s: Seq[String] = allStrs.flatten
flatten操作对容器序列进行操作,它从每个容器中取出元素,并创建一个包含所有这些元素的序列。Option的行为很像一个包含0或1个元素的容器,因此Option序列上的flatten将从这些Option中提取值,它删除序列中的所有None值,并提取所有Some值的内容。
flatten
Option
None
Some
1条答案
按热度按时间bxjv4tth1#
正如评论中提到的,这将奏效:
flatten
操作对容器序列进行操作,它从每个容器中取出元素,并创建一个包含所有这些元素的序列。Option
的行为很像一个包含0或1个元素的容器,因此Option
序列上的flatten
将从这些Option
中提取值,它删除序列中的所有None
值,并提取所有Some
值的内容。