2017-09-22 143 views
0

我有斯卡拉列表不能轉換列表[任何]列出[(字符串,字符串)]

freq_items_list 
List[Any] = List(Array((fid,1007)), Array((tes,d0920)), Array((tn,r3026), (fd,1007)), Array((tn,g5260_p2)), Array((testN 
ame,g5260_p2), (fd,1007)), Array((tn,c7835)), Array((tn,g5250_p2)), Array((tn,g5250_p2), (fd,1007)), Array((tn,r7090)), 
Array((tn,r7090), (fd,1007))) 

我嘗試將其轉換成列表[(字符串,字符串)通過使用

frequent_items_list.map(_.asInstanceOf[Array[(String, String)]]) 

然而,當我嘗試,我得到一個ClassCastException

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lscala.Tuple2; 

我是新來的Scala有另一種方式來轉換這個,什麼是錯的電流呢?

+0

您的代碼看起來不完整。如果我們看到你的變量的類型,那麼會更好。如果你分享了整個代碼,調試起來會更容易。 – fcat

+2

從一種類型轉換爲另一種類型幾乎總是錯誤的。它會向您打開運行時異常(如您所見)。你基本上是在告訴編譯器:「拿走你的安全保護,我知道我在做什麼(或者至少我是這麼認爲的)」 – jwvh

+0

並且在運行時之後說:「Ops,不,你沒有知道你在做什麼「 – pedrofurla

回答

0

這將讓你一個List[(String, String)]結果即使元組元素不是字符串(他們甚至可以是各類型的混合),但將降大任List元素不是Array(),這將降大任於Array元素不是2元組。

freq_items_list.flatMap{case a:Array[_]=> a.toList; case _ => List()} 
       .collect{case (x,y) => (x.toString, y.toString)} 
+0

某些有問題的數組有多個元素:'Array((testN ame,g5260_p2),(fd,1007))'',例如。 –

+0

@ P.Frolov;接得好。我測試了一個減少的數據集。固定。 – jwvh