Transformación de Elementos con el Método map()
Ya estás familiarizado con el concepto de operaciones intermedias en la Stream API. Estas operaciones transforman los elementos del stream y devuelven un nuevo stream sin modificar el original. Un método de este tipo es map().
El método map() recibe una Function, que se aplica a cada elemento del stream. Los resultados se recopilan en un nuevo stream, mientras que el stream original permanece sin cambios:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– el tipo de elementos en el stream original;R– el tipo de elementos en el nuevo stream (después de la transformación).
En esencia, se pasa un tipo T, que se transforma en el tipo R. Por eso se utiliza map() cuando es necesario cambiar el tipo de dato de un stream.
Aplicación práctica
Supongamos que es necesario ajustar una lista de precios añadiendo un 10% de impuesto a cada uno. Este es un escenario común en cálculos financieros, como la aplicación de impuestos sobre ventas a los precios de productos.
Main.java
1234567891011121314151617package com.example; import java.util.List; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Double> prices = Arrays.asList(100.0, 200.0, 50.0); // Apply a 10% tax to each price List<Double> finalPrices = prices.stream() .map(price -> price * 1.1) .toList(); System.out.println(finalPrices); } }
En este ejemplo, cada precio en la lista se incrementa en un 10% utilizando el método map().
Cada valor se multiplica por 1.1 para considerar el impuesto y los resultados se recopilan en una nueva lista. Esta lista transformada puede utilizarse para posteriores cálculos, como la generación de facturas o informes financieros.
Tipo primitivo
A diferencia del método map habitual, que devuelve un stream de objetos, mapToInt(), mapToLong() y mapToDouble() devuelven streams de tipos primitivos, lo que reduce el consumo de memoria y mejora el rendimiento.
Ejemplo práctico
El siguiente ejemplo convierte una lista de cadenas numéricas en streams primitivos e imprime los valores.
Main.java
1234567891011121314151617181920212223242526272829303132package com.example; import java.util.List; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.DoubleStream; public class Main { public static void main(String[] args) { List<String> numbers = List.of("10", "20", "30", "40"); // Convert to `IntStream` IntStream intStream = numbers.stream() .mapToInt(Integer::parseInt); System.out.print("IntStream: "); intStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `LongStream` LongStream longStream = numbers.stream() .mapToLong(Long::parseLong); System.out.print("LongStream: "); longStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `DoubleStream` DoubleStream doubleStream = numbers.stream() .mapToDouble(Double::parseDouble); System.out.print("DoubleStream: "); doubleStream.forEach(n -> System.out.print(n + " ")); } }
Este ejemplo procesa una lista de cadenas numéricas.
Primero, mapToInt() convierte los valores en un IntStream, imprimiendo cada número como un entero.
A continuación, mapToLong() crea un LongStream, manteniendo los mismos valores numéricos pero en el tipo long.
Finalmente, mapToDouble() transforma los datos en un DoubleStream, convirtiendo los enteros en números decimales.
El uso de streams primitivos garantiza un manejo eficiente de los datos numéricos y evita la creación innecesaria de objetos.
1. ¿Qué hace el método map() en la Stream API?
2. ¿Qué tipo de interfaz funcional debe aceptar el método map()?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you show an example of using the map() method in Java?
What are some common use cases for mapToInt(), mapToLong(), and mapToDouble()?
How do I choose between using map() and the primitive mapping methods?
Awesome!
Completion rate improved to 2.33
Transformación de Elementos con el Método map()
Desliza para mostrar el menú
Ya estás familiarizado con el concepto de operaciones intermedias en la Stream API. Estas operaciones transforman los elementos del stream y devuelven un nuevo stream sin modificar el original. Un método de este tipo es map().
El método map() recibe una Function, que se aplica a cada elemento del stream. Los resultados se recopilan en un nuevo stream, mientras que el stream original permanece sin cambios:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– el tipo de elementos en el stream original;R– el tipo de elementos en el nuevo stream (después de la transformación).
En esencia, se pasa un tipo T, que se transforma en el tipo R. Por eso se utiliza map() cuando es necesario cambiar el tipo de dato de un stream.
Aplicación práctica
Supongamos que es necesario ajustar una lista de precios añadiendo un 10% de impuesto a cada uno. Este es un escenario común en cálculos financieros, como la aplicación de impuestos sobre ventas a los precios de productos.
Main.java
1234567891011121314151617package com.example; import java.util.List; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Double> prices = Arrays.asList(100.0, 200.0, 50.0); // Apply a 10% tax to each price List<Double> finalPrices = prices.stream() .map(price -> price * 1.1) .toList(); System.out.println(finalPrices); } }
En este ejemplo, cada precio en la lista se incrementa en un 10% utilizando el método map().
Cada valor se multiplica por 1.1 para considerar el impuesto y los resultados se recopilan en una nueva lista. Esta lista transformada puede utilizarse para posteriores cálculos, como la generación de facturas o informes financieros.
Tipo primitivo
A diferencia del método map habitual, que devuelve un stream de objetos, mapToInt(), mapToLong() y mapToDouble() devuelven streams de tipos primitivos, lo que reduce el consumo de memoria y mejora el rendimiento.
Ejemplo práctico
El siguiente ejemplo convierte una lista de cadenas numéricas en streams primitivos e imprime los valores.
Main.java
1234567891011121314151617181920212223242526272829303132package com.example; import java.util.List; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.DoubleStream; public class Main { public static void main(String[] args) { List<String> numbers = List.of("10", "20", "30", "40"); // Convert to `IntStream` IntStream intStream = numbers.stream() .mapToInt(Integer::parseInt); System.out.print("IntStream: "); intStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `LongStream` LongStream longStream = numbers.stream() .mapToLong(Long::parseLong); System.out.print("LongStream: "); longStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `DoubleStream` DoubleStream doubleStream = numbers.stream() .mapToDouble(Double::parseDouble); System.out.print("DoubleStream: "); doubleStream.forEach(n -> System.out.print(n + " ")); } }
Este ejemplo procesa una lista de cadenas numéricas.
Primero, mapToInt() convierte los valores en un IntStream, imprimiendo cada número como un entero.
A continuación, mapToLong() crea un LongStream, manteniendo los mismos valores numéricos pero en el tipo long.
Finalmente, mapToDouble() transforma los datos en un DoubleStream, convirtiendo los enteros en números decimales.
El uso de streams primitivos garantiza un manejo eficiente de los datos numéricos y evita la creación innecesaria de objetos.
1. ¿Qué hace el método map() en la Stream API?
2. ¿Qué tipo de interfaz funcional debe aceptar el método map()?
¡Gracias por tus comentarios!