El método collect
en Scala es una función de orden superior que se utiliza para filtrar y transformar elementos de una colección en base a ciertas condiciones. Esta función devuelve una nueva colección que contiene sólo aquellos elementos de la colección original que satisfacen la condición especificada.
La sintaxis básica de la función collect
es la siguiente:
def collect[B](pf: PartialFunction[A, B]): Traversable[B]
Aquí, pf
es una función parcial que toma elementos de tipo A
de la colección original y devuelve elementos de tipo B
para la nueva colección. La función collect
aplica esta función parcial a cada elemento de la colección original y devuelve una nueva colección de tipo Traversable[B]
.
Veamos algunos ejemplos para entender mejor el funcionamiento de collect
.
Ejemplo 1: Filtrando y transformando una lista de números
Supongamos que tenemos una lista de números y queremos filtrar sólo aquellos números que son pares y luego dividirlos por dos. Podemos hacer esto utilizando la función collect
de la siguiente manera:
val numeros = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val nuevosNumeros = numeros.collect {
case x if x % 2 == 0 => x / 2
}
println(nuevosNumeros)
La salida de este programa será:
List(1, 2, 3, 4, 5)
Aquí, utilizamos la función collect
para aplicar una función parcial que toma sólo aquellos números que son pares (case x if x % 2 == 0
) y los divide por dos (x / 2
). La función collect
devuelve una nueva lista que contiene sólo los números transformados que satisfacen la condición especificada.
Ejemplo 2: Filtrando y transformando un mapa de cadenas y enteros
Supongamos que tenemos un mapa que contiene nombres de personas y sus edades, y queremos filtrar sólo aquellos nombres que comienzan con la letra “A” y luego duplicar sus edades. Podemos hacer esto utilizando la función collect
de la siguiente manera:
val personas = Map("Alice" -> 25, "Bob" -> 30, "Charlie" -> 35, "Anna" -> 40)
val nuevasEdades = personas.collect {
case (nombre, edad) if nombre.startsWith("A") => edad * 2
}
println(nuevasEdades)
La salida de este programa será:
List(50, 80)
Aquí, utilizamos la función collect
para aplicar una función parcial que toma sólo aquellos pares clave-valor cuyas claves comienzan con la letra “A” (case (nombre, edad) if nombre.startsWith("A")
) y duplica sus valores (edad * 2
). La función collect
devuelve una nueva lista que contiene sólo las edades transformadas que satisfacen la condición especificada.
En resumen, la función collect
en Scala es una herramienta útil para filtrar y transformar elementos de una colección en base a ciertas condiciones. Con su uso, podemos crear nuevas colecciones que contengan sólo aquellos elementos que satisfagan nuestras necesidades específicas.