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

ped*_*o91 4 collections scala optional

想象一下,你有一个Map[Option[Int], String],你想Map[Int, String]丢弃包含None密钥的条目.

另一个应该以某种方式类似的例子是List[(Option[Int], String)]将其转换为List[(Int, String)],再次丢弃包含None第一个元素的元组.

什么是最好的方法?

And*_*ann 7

collect 你的朋友在这里:

示例数据定义

val data = Map(Some(1) -> "data", None -> "")
Run Code Online (Sandbox Code Playgroud)

Map的解决方案

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

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

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