从 Scala 集合中提取 Option 的最简单方法

Simplest way to extract Option from Scala collections

假设您有一个 Map[Option[Int], String] 并且您想要一个 Map[Int, String] 丢弃包含 None 作为键的条目。

另一个应该有点相似的例子是 List[(Option[Int], String)] 并将其转换为 List[(Int, String)],再次丢弃包含 None 作为第一个元素的元组。

最好的方法是什么?

collect 是你的朋友:

示例数据定义

val data = Map(Some(1) -> "data", None -> "")

地图解决方案

scala> data collect { case ( Some(i), s) => (i,s) }
res4: scala.collection.immutable.Map[Int,String] = Map(1 -> data)

同样的方法适用于元组列表

scala> data.toList collect { case ( Some(i), s) => (i,s) }
res5: List[(Int, String)] = List((1,data))