2014-09-27 57 views
-3

下面的列表中我的斯卡拉列表如何斯卡拉列表轉換爲列表

List((1409497202065,0.533), (1411804719,0.533), (1411804735,0.533), (1411811091,0.0)) 

現在我應該怎麼轉換上面所列內容得到下面的輸出

List(List(1409497202065,0.533),List(1411804719,0.533), List(1411804735,0.533), List(1411811091,0.0)) 
+0

'myList.map(List(_))'? – 2014-09-27 11:07:47

+0

它創建列表如下列表(列表((1409497202065,0.533)),列表((1411804719,0.533)),列表((1411804735,0.533)),列表((1411811091,0.0))) – Yogesh 2014-09-27 11:09:50

+0

嗨Neu它工作正常但一個問題,當我應該解析上面的列表json在播放框架「沒有找到Json序列化器類型List [List [(Long,Float)]]」,我轉換如下Json.toJson(轉換)我認爲爲長值它可能不解析,它應該怎麼解析json – Yogesh 2014-09-27 11:17:21

回答

1

試試這個:

myList.map(_.productIterator.toList) 

scala> val myList = List((14,0.533), (14118,0.533), (1735,0.533), (1411,0.0)) 
myList: List[(Int, Double)] = List((14,0.533), (14118,0.533), (1735,0.533), (1411,0.0)) 

scala> myList.map(_.productIterator.toList) 
res22: List[List[Any]] = List(List(14, 0.533), List(14118, 0.533), List(1735, 0.533),  List(1411, 0.0)) 

productIterator.toList將元組轉換爲List,但將類型更改爲Any,所以如果你想這是序列化JSON中,你必須:

myList.map(_.productIterator.map(_.toString).toList) 

您可以從Shapeless庫希望異類列表如果你的元組類型不符合

如果你只是想在裏面ListString

myList.map(_.productIterator.mkString(",")) 
2

鑑於lst是上述列表中,你可以直接映射像這樣:

lst.map { 
    case (a, b) => List(a, b) 
    case _ => Nil // just in case you got some data that doesn't fit 
} 

這將產生一個List[List[Double]]看起來像以下:

List(List(1409497202065.0,0.533),List(1411804719.0,0.533), List(1411804735.0,0.533), List(1411811091.0,0.0)) 

上述系統的優點,是它的無限擴展;因爲它總是能夠更多的情況下添加到match

PS:在你的列表中的第一個數字是太大,是一個整數,這可以通過使用String小號BigInt s內固定,Long s甚至Double小號

+0

我認爲「以防萬一」的情況是多餘的,因爲'lst'的類型是List [(Double,Double)]',所以它只是不能包含任何不是雙打對的東西。然後有可能把它寫成一行:) – 2014-09-28 12:39:07

+0

@VladimirMatveev我喜歡掩蓋我的基地;它包含的內容實際上是「(Long,Double)」,因爲第一個數字不包含任何小數點 – 2014-09-28 17:17:33

+0

它確實包含小數點:) – 2014-09-28 20:02:24

0

爲了簡單性和可讀性,認爲這對修真二倍體給定的名單a

for ((x,y) <- a) yield List(x,y) 

這工作也(可能)二倍體的空列表。