如何将scala列表转换为列表列表

时间:2014-09-27 11:05:41

标签: scala

下面是我的scala列表

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

3 个答案:

答案 0 :(得分: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 s BigInt s,Long s甚至{{1}来修复}Š

答案 1 :(得分: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库中的异构列表

如果您只想在String内添加一个List

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

答案 2 :(得分:0)

为了简单和可读性,请考虑这一点,以便理解给定列表的a

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

这也适用于(可能)空的重复列表。