En Scala, el método flatMap() es idéntico al método map() , pero la única diferencia es que en flatMap se elimina la agrupación interna de un elemento y se genera una secuencia. Se puede definir como una combinación de método de mapa y método de aplanamiento . El resultado obtenido al ejecutar el método map seguido del método flatten es el mismo que obtiene flatMap() . Entonces, podemos decir que flatMap primero ejecuta el método map y luego el método flatten para generar el resultado deseado.
Nota:
- Tiene una clase de opción incorporada , ya que una opción se puede expresar como una secuencia que tiene como máximo un elemento, es decir, está vacía o tiene solo un elemento.
- El método flatten() se utiliza para desintegrar los elementos de una colección de Scala con el fin de construir una sola colección con los elementos de tipo similar.
Veamos un ejemplo para ilustrar cómo funciona flatMap .
val name = Seq("Nidhi", "Singh")
Caso 1:
apliquemos map() y flatten() en la secuencia indicada.
// Aplicando map()
val result1 = nombre.map(_.toLowerCase)//
Lista de salida (nidhi, singh)// Aplicando flatten() ahora,
val result2 = result1.flatten//
Lista de salida (n, i, d, h, i, s, i, n, g, h)
Caso 2:
apliquemos flatMap() directamente en la secuencia dada.
name.flatMap(_.toLowerCase) // Output List(n, i, d, h, i, s, i, n, g, h)
Entonces, podemos ver aquí que el resultado obtenido en ambos casos es el mismo, por lo tanto, podemos decir que flatMap es una combinación de map y flatten method.
Ahora, veamos algunos ejemplos del método flatMap .
- Utilizando flatMap en una secuencia de strings.
Ejemplo:// Scala program of flatMap
// Creating object
object
GfG
{
// Main method
def
main(args
:
Array[String])
{
// Creating a sequence of strings
val
portal
=
Seq(
"Geeks"
,
"for"
,
"Geeks"
)
// Applying flatMap
val
result
=
portal.flatMap(
_
.toUpperCase)
// Displays output
println(result)
}
}
Producción:List(G, E, E, K, S, F, O, R, G, E, E, K, S)
Aquí, flatMap se aplica a la secuencia indicada, por lo que se genera una lista de secuencias de caracteres.
- Aplicando flatMap con otras funciones.
Ejemplo :// Scala program of flatMap
// Creating object
object
GfG
{
// Main method
def
main(args
:
Array[String])
{
// Creating a list of numbers
val
list
=
List(
2
,
3
,
4
)
// Defining a function
def
f(x
:
Int)
=
List(x-
1
, x, x+
1
)
// Applying flatMap
val
result
=
list.flatMap(y
=>
f(y))
// Displays output
println(result)
}
}
Producción:List(1, 2, 3, 2, 3, 4, 3, 4, 5)
Aquí, flatMap se aplica a la otra función definida en el programa y así se genera una lista de secuencias de números. Veamos cómo se calcula la salida.
List(List(2-1, 2, 2+1), List(3-1, 3, 3+1), List(4-1, 4, 4+1)) // After evaluation we get, List(List(1, 2, 3), List(2, 3, 4), List(3, 4, 5))
Entonces, el primer paso funciona como aplicar el método de mapa en la otra función indicada.
List(1, 2, 3, 2, 3, 4, 3, 4, 5)
El segundo paso funciona como aplicar flatten a la salida obtenida por el método del mapa en el primer paso.
Ejemplo :// Scala program of flatMap
// Creating object
object
GfG
{
// Main method
def
main(args
:
Array[String])
{
// Creating a sequence of numbers
val
seq
=
Seq(
4
,
5
,
6
,
7
)
// Applying flatMap on another
// function
val
result
=
seq flatMap { s
=>
Seq(s, s-
1
)
}
// Displays output
println(result)
}
}
Producción:List(4, 3, 5, 4, 6, 5, 7, 6)
Aquí, también se obtiene una salida como el primer ejemplo de flatMap con otras funciones.
- Utilizando flatMap en declaraciones if-else.
Ejemplo :// Scala program of flatMap
// Creating object
object
GfG
{
// Main method
def
main(args
:
Array[String])
{
// Creating a sequence of numbers
val
seq
=
Seq(
8
,
15
,
22
,
23
,
24
)
// Applying flatMap on if-else
// statement
val
result
=
seq flatMap { s
=>
if
(s
%
3
==
0
) Seq(s)
else
Seq(-s)
}
// Displays output
println(result)
}
}
Producción:List(-8, 15, -22, -23, 24)
Aquí, si un elemento de la secuencia dada satisface la condición establecida, ese elemento se devuelve; de lo contrario, se obtiene un elemento negativo.
Publicación traducida automáticamente
Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA