Ya hemos hablado en otros posts sobre el gran poder que condujo la introducción de Streams a partir de Java 8. Su fama no es gratuita, ya que esta es una herramienta que nos facilita el manejo de colecciones de datos de manera declarativa. Una de sus herramientas más conocidas es el método map() de Java Stream Map, el cual nos permite transformar los elementos de un flujo de datos. El día de hoy queremos mostrarte mejor cómo funciona Java Stream Map por medio de algunos ejemplos.
¿Qué es Java Stream Map?
El método Java stream map() es una operación intermedia que hace posible transformar los elementos de un Stream al aplicar una función a cada uno de ellos. El resultado que obtenemos es un nuevo Stream con los elementos transformados. Si quieres, por ejemplo, cambiar el tipo de datos de un objeto o realizar alguna transformación en cada elemento de una lista, esta opción es para ti.
La sintaxis de map() es la siguiente:
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
Donde:
T
es el tipo de los elementos del Stream original.R
es el tipo de los elementos después de aplicar la función de transformación.
¿Cómo funciona Java Stream Map?
Java Stream map funciona del siguiente modo: recibe una función que transforma cada elemento del Stream en algo nuevo y devuelve un Stream nuevo con los resultados. Esto lo hace de manera “perezosa”, esto quiere decir que no ejecuta la operación inmediatamente, sino cuando el Stream es consumido con una operación terminal como collect() o forEach().
Veamos algunos ejemplos:
Transformar una lista de objetos
Imaginemos que tenemos una lista de personas y queremos extraer solo sus edades. Usando el método map(), podemos transformar cada objeto Persona en su edad así:
List<Persona> personas = Arrays.asList(
new Persona("Pedro", 20),
new Persona("Ana", 25),
new Persona("Juan", 30)
);
List<Integer> edades = personas.stream()
.map(Persona::getEdad)
.collect(Collectors.toList());
edades.forEach(System.out::println);
En este ejemplo la lista de personas se transforma en una lista de enteros (las edades), usando el método map()
para acceder a la edad de cada persona. El resultado sería:
20
25
30
Usar Java Stream Map con datos numéricos
Si estás trabajando con Streams de datos numéricos, Java ofrece métodos como mapToInt(), mapToDouble(), y mapToLong(). Estos métodos permiten realizar operaciones numéricas, como calcular la suma, promedio, mínimo o máximo.
Calcular la suma de edades:
int sumaEdades = personas.stream()
.mapToInt(Persona::getEdad)
.sum();
System.out.println("Suma de edades: " + sumaEdades);
Aquí estamos utilizando mapToInt() para transformar los objetos Persona en sus edades y luego sumar todas las edades usando el método sum()
. El resultado sería:
Suma de edades: 75
Java Stream Map con otros tipos de datos
También podemos usar Java Map stream para transformar otros tipos de datos. Por ejemplo, si tenemos una lista de strings y lo que queremos es convertir todos los elementos a mayúsculas, podemos hacerlo fácilmente con map().
Convertir a mayúsculas
List<String> palabras = Arrays.asList("java", "stream", "map");
List<String> palabrasMayusculas = palabras.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
palabrasMayusculas.forEach(System.out::println);
El resultado sería:
JAVA
STREAM
MAP
Operaciones estadísticas con Java Stream Map
Si estás trabajando con datos numéricos y necesitas obtener estadísticas como el promedio o el máximo, puedes aprovechar los métodos numéricos de Stream.
Calcular estadísticas de edades
IntSummaryStatistics stats = personas.stream()
.mapToInt(Persona::getEdad)
.summaryStatistics();
System.out.println("Promedio: " + stats.getAverage());
System.out.println("Edad máxima: " + stats.getMax());
System.out.println("Edad mínima: " + stats.getMin());
El método summaryStatistics() lo que hace es proporcionarnos un conjunto de estadísticas útiles, como el promedio, máximo y mínimo.
Si te ha interesado este tema y deseas seguir aprendiendo sobre el lenguaje de programación más famoso del mundo, no dudes en inscribirte a nuestro curso de java, un bootcamp en el cual aprenderás todas las habilidades y conceptos avanzados de java y en donde te enseñaremos a conseguir empleo en el mundo tech. ¡Aprovecha la oportunidad de cambiar tu vida ahora!