Scala中优雅筛选并扁平化Seq[Option[String]]的最优方式?
Scala 处理Option序列的优雅实现
给定变量:
val allStrs: Seq[Option[String]] = Seq(Some("A"), Some("B"), None)
要得到结果Seq("A", "B"),有两种更优雅的实现方式,且你当前的实现并非最优解:
最优简洁实现:直接调用flatten
allStrs.flatten
Scala的flatten方法针对Seq[Option[T]]类型时,会自动提取Some包裹的元素,同时忽略None,一步到位完成需求,无需额外过滤操作。
可读性优先实现:使用collect模式匹配
allStrs.collect { case Some(s) => s }
通过模式匹配明确筛选出Some类型的元素并提取值,可读性极强,若后续需要对提取出的字符串做转换,也能直接在代码块中扩展逻辑。
关于你当前的实现
allStrs.filter(_.isDefined).flatten能得到正确结果,但属于冗余写法:flatten内部已经隐含了过滤None的逻辑,额外的filter(_.isDefined)多了一次不必要的集合遍历(即便Scala可能做优化),写法上也不够简洁。
内容的提问来源于stack exchange,提问作者Parting
相关产品推荐
相关产品推荐

