How to filter None's out of List[Option]?

给你一囗甜甜゛ 提交于 2019-12-03 02:30:51

问题


If I have a List[Option[A]] in Scala, what is the idiomatic way to filter out the None values?

One way is to use the following:

val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)

Is there a more "idiomatic" way? This does seem pretty simple.


回答1:


If you want to get rid of the options at the same time, you can use flatten:

scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)



回答2:


someList.filter(_.isDefined) if you want to keep the result type as List[Option[A]]




回答3:


The cats library also has flattenOption, which turns any F[Option[A]] into an F[A] (where F[_] is a FunctorFilter)

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)


来源:https://stackoverflow.com/questions/10104558/how-to-filter-nones-out-of-listoption

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!