2014-09-27 58 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) 

这工作也(可能)二倍体的空列表。