others - scala - 如何将 List[List[Long]] 转换为List[List[Int]]?

将List[List[Long]]转换为Scala中的List[List[Int]]的最佳方法?

我有一个列表List [List[Long] ] = List(List(11 ,10 ,11 ,10 ,11) ,List(8 ,19 ,24 ,0 ,2)) .

我需要将它转换为List [List[Int] ] 。

时间:

尝试这个l.map(_.map(_.toInt))


val l: List[List[Long]] = List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2))


l.map(_.map(_.toInt))



应该是


res2: List[List[Int]] = List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2))



你也可以使用cats库,并编写List函数,


import cats.Functor


import cats.implicits._


import cats.data._



val l: List[List[Long]] = List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2))



Functor[List].compose[List].map(l)(_.toInt)


//or


Nested(l).map(_.toInt).value



只有在完全确定Int不会溢出的情况下。


val l1: List[List[Long]] = List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2))


val l2: List[List[Int]] = l1.map(list => list.map(long => long.toInt))



可以使用map函数在集合上实现简单转换。

map通过将函数应用于列表中的每个元素来工作,你需要像下面的示例一样应用map函数2次。


val x : List[List[Long]] = List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2)) 


println(x)



val y :List[List[Int]]= x.map(a => a.map(_.toInt))



println(y)



输出:


List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2))


List(List(11, 10, 11, 10, 11), List(8, 19, 24, 0, 2))



...