2016-11-11 51 views
1

提取值我有一些()類型映射[字符串,字符串],如如何從一些()Scala中

Array[Option[Any]] = Array(Some(Map(String, String) 

我想它返回的

Array(Map(String, String)) 

我已經試過提取IT- 比方說,如果

val x = Array(Some(Map(String, String) 
val x1 = for (i <- 0 until x.length) yield { x.apply(i) } 

的幾個不同的方法,但這種返回IndexedSeq(一些(圖)),這是不是我W¯¯螞蟻。

我試過模式匹配,

x.foreach { i => 
    i match { 
    case Some(value) => value 
    case _ => println("nothing") }} 

我想這是有些成功的另一件事是,

x.apply(0).get.asInstanceOf[Map[String, String]] 

會做什麼,我想要的東西,但只得到了整個數組的第0個指標我想要數組中的所有地圖。 我怎樣才能從一些提取地圖類型?

回答

0

一般來說,圖案或者是使用轉換對Option[T],像mapflatMapfilter

的問題是,我們需要添加一個類型轉換,從Any檢索底層Map[String, String] 。因此,我們將使用flatten,以消除任何潛在的None類型和解開的Option,並且asInstanceOf中檢索類型:

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)) 
+0

我覺得麻煩的是我想擺脫任何類型來操作Map [String,String],但getOrElse仍然返回Array [Any]。 – user3551523

+0

@ user3551523您正在處理一個'Array [Any]'或一個'Array [Option [Map [String,String]]]'? –

+0

我正在使用Array [Option [Any]] – user3551523

1

如果你想要一個Array[Any]Array[Option[Any]],你可以用這個表達:

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

這會將所有非空的Option s的值放入新數組中。

它相當於此:

x.flatMap(_.toArray[Any]) 

在這裏,所有的選項將被轉換爲0或1元件的陣列。所有這些數組然後將被平展回到包含所有值的單個數組。