如何从Scala中的Some()中提取值

如何从Scala中的Some()中提取值,scala,functional-programming,Scala,Functional Programming,我有一些()类型的映射[String,String],比如 Array[Option[Any]] = Array(Some(Map(String, String) 我想把它作为商品退给你 Array(Map(String, String)) 我尝试了几种不同的提取方法- 假设 val x = Array(Some(Map(String, String) val x1 = for (i <- 0 until x.length) yield { x.apply(i) } 我尝试过的另一件

我有一些()类型的映射[String,String],比如

Array[Option[Any]] = Array(Some(Map(String, String)
我想把它作为商品退给你

Array(Map(String, String))
我尝试了几种不同的提取方法- 假设

val x = Array(Some(Map(String, String)
val x1 = for (i <- 0 until x.length) yield { x.apply(i) }
我尝试过的另一件有点成功的事情是

x.apply(0).get.asInstanceOf[Map[String, String]]
将执行我想要的操作,但它只获取整个数组的第0个索引,并且我想要数组中的所有映射。
如何从某些映射类型中提取映射类型?

通常,模式是使用
选项[T]
上的转换,如
映射
平面映射
过滤器
,等等

问题是,我们需要添加类型转换来从
Any
检索底层
Map[String,String]
。因此,我们将使用
展平
删除任何潜在的
类型,并展开
选项
,使用
替代
检索类型:

scala> val y = Array(Some(Map("1" -> "1")), Some(Map("2" -> "2")), None)
y: Array[Option[scala.collection.immutable.Map[String,String]]] = Array(Some(Map(1 -> 1)), Some(Map(2 -> 2)), None)

scala> y.flatten.map(_.asInstanceOf[Map[String, String]])
res7: Array[Map[String,String]] = Array(Map(1 -> 1), Map(2 -> 2))

如果希望从
数组[选项[Any]]
中获得
数组[任何]
,则可以将其用于表达式:

for {
    opt <- x
    value <- opt
} yield value

在这里,所有选项都将转换为0或1元素的数组。然后,所有这些数组将被展平为一个包含所有值的数组。

另外,当您仅讨论单个值时,您可以尝试使用
Some(“test”)。head
和for null simply
Some(null)。展平

我认为问题在于,我想摆脱任何类型来操作Map[String,String]但是getOrElse仍然返回Array[Any]。@user3551523您使用的是
Array[Any]
,或者
Array[Option[Map[String,String]]]
?@user3551523我明白了。您知道底层
数组中的所有对象都必须是
映射[String,String]
吗?是的,它们都是映射[String,String],但它被封装在一些内部。所以我现在有一些(Map[String,String])。你编辑的版本正是我需要的!谢谢
Some(“test”)。head
返回类型
String
,而
Some(null)。flatten
返回类型
选项[无]
。我看不出他们之间有什么联系。
for {
    opt <- x
    value <- opt
} yield value
x.flatMap(_.toArray[Any])