如何从Scala中的Some()中提取值
我有一些()类型的映射[String,String],比如如何从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) } 我尝试过的另一件
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 simplySome(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])