функция flatMap списка в Scala - PullRequest
0 голосов
/ 10 апреля 2020
val l = List(1,2,3)
val f = l flatMap (_ + 1)

Я выполняю вышеуказанный фрагмент кода в Scala и получаю следующую ошибку.

<console>:12: error: type mismatch;
 found   : Int(1)
 required: String
       val f = l flatMap (_ + 1)

Что делает flatMap, так это то, что он выполняет функцию отображения, которую мы предоставляем (в этом случае ->: _ + 1) и затем он повторяет результат функции карты. Если итератор недоступен в выводе карты, он выдает эту ошибку.

Правильно ли мое понимание?

1 Ответ

5 голосов
/ 10 апреля 2020

Да, но функция, которую вы передаете flatMap, должна сама создать List. То, что вы ищете, это просто map:

val l = List(1,2,3)
val f = l map (_ + 1)

flatMap является (как следует из названия) последовательными map и flatten. Последнее в случае List превращает вложенную коллекцию в плоскую:

val nestedList: List[List[A]] = ???
val flattenedList: List[A] = nestedList.flatten

Ваш пример будет работать, если вы передадите функцию, выдающую List в flatMap, примеры:

val res1 = l.flatMap(el => List(el + 1)) // add 1 to every element - same as with map above
val res2 = l.flatMap(el => List(el, 1)) // add 1 after every element
...