Map¶
Es una función que recibe una colección y nos retorna la misma colección aplicando una transformación (funcion) a cada uno de los elementos de una lista
- Elevar los elementos de una lista al cuadrado
- Retornar la tamaños de una lista de strings
- Retornar una lista de booleanos a partir de una lista de enteros en la cual quiero saber quienes son pares
scala> val x = List(1,2,3,4)
val x: List[Int] = List(1, 2, 3, 4)
scala> x.map(x => x*x)
val res4: List[Int] = List(1, 4, 9, 16)
scala> x.map(x => x % 2)
val res5: List[Int] = List(1, 0, 1, 0)
scala> x.map(x => x % 2 == 0)
val res6: List[Boolean] = List(false, true, false, true)
La función map permite no preocuparnos por los tipos
object Mapas {
// Función genérica que aplica una función a cada elemento de una lista (implementación de map)
def mapeo[U,V](l : List[U], f : U => V) : List[V] = {
l match {
case Nil => Nil // Caso base: lista vacía retorna lista vacía
case x :: xs => f(x) :: mapeo(xs, f) // Aplica función al elemento cabeza y procesa recursivamente la cola
}
}
// Función principal para demostrar el uso de la función mapeo
def main(args: Array[String]): Unit = {
val lista = List(1, 2, 3, 4, 5) // Lista original de enteros
// Ejemplo 1: Transformar cada número a su doble
val resultado = mapeo[Int,Int](lista, (x: Int) => x * 2)
println(resultado) // Debería imprimir List(2, 4, 6, 8, 10)
// Ejemplo 2: Transformar cada número a string con formato
var resultado2 = mapeo[Int,String](lista, (x: Int) => s"Número: $x")
println(resultado2) // Debería imprimir List("Número: 1", "Número: 2", "Número: 3", "Número: 4", "Número: 5")
}
}
Filter¶
El filter es una función que nos permite tomar los elementos de una lista que cumplan una condición
- Retornar los elementos de una lista que son pares
- Retornar los elementos de una lista de string que tienen cierto tamaño
- Retorna los elementos de una lista que son primos
scala> x
val res11: List[Int] = List(1, 2, 3, 4)
scala> x filter (_ % 2 == 0)
val res12: List[Int] = List(2, 4)
object Filtro {
// Función genérica que filtra elementos de una lista según un predicado
def filtrar[U](l : List[U], f : U => Boolean) : List[U] = {
l match {
case Nil => Nil // Caso base: lista vacía retorna lista vacía
case x :: xs => if (f(x)) x :: filtrar(xs, f) else filtrar(xs, f) // Si cumple condición incluye elemento, sino continúa
}
}
// Función principal para demostrar el uso de la función filtrar
def main(args: Array[String]): Unit = {
val lista = List(1, 2, 3, 4, 5) // Lista original de enteros
// Ejemplo 1: Filtrar números pares
val resultado = filtrar[Int](lista, (x: Int) => x % 2 == 0)
println(resultado) // Debería imprimir List(2, 4)
// Ejemplo 2: Filtrar números mayores que 3
var resultado2 = filtrar[Int](lista, (x: Int) => x > 3)
println(resultado2) // Debería imprimir List(4, 5)
}
}
A diferencia de map la transformación de filter conserva el tipo de lista.