Как преобразовать список [List [Long]] в список [List [Int]]? - PullRequest
3 голосов
/ 31 мая 2019

Каков наилучший способ преобразования List[List[Long]] в List[List[Int]] в Scala?

Например, учитывая следующий список типа List[List[Long]]

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

как можноэто будет преобразовано в List[List[Int]]?

Ответы [ 4 ]

6 голосов
/ 31 мая 2019

Вы также можете использовать cats lib для этого и составить 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

и еще один метод чистого скала (хотя и не очень безопасный)

val res:List[List[Int]] = l.asInstanceOf[List[List[Int]]]
5 голосов
/ 31 мая 2019

Попробуйте 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))
3 голосов
/ 31 мая 2019

Только если вы полностью уверены, что не переполните 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) .

2 голосов
/ 31 мая 2019

может быть достигнуто простым преобразованием при сборе с использованием функции 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...