Trasformazione degli Elementi con il Metodo map()
Hai già familiarità con il concetto di operazioni intermedie nell'Stream API. Queste operazioni trasformano gli elementi dello stream e restituiscono un nuovo stream senza modificare quello originale. Un metodo di questo tipo è map().
Il metodo map() accetta una Function, che viene applicata a ogni elemento dello stream. I risultati vengono raccolti in un nuovo stream, mentre lo stream originale rimane invariato:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– il tipo di elementi nello stream originale;R– il tipo di elementi nel nuovo stream (dopo la trasformazione).
Fondamentalmente, si passa un tipo T, che viene trasformato in un tipo R. Per questo motivo si utilizza map() quando è necessario modificare il tipo di dato di uno stream.
Applicazione pratica
Supponiamo sia necessario modificare un elenco di prezzi aggiungendo una tassa del 10% a ciascuno. Questo è uno scenario comune nei calcoli finanziari, come l'applicazione dell'IVA ai prezzi dei prodotti.
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); } }
In questo esempio, ogni prezzo nella lista viene aumentato del 10% utilizzando il metodo map().
Ogni valore viene moltiplicato per 1.1 per includere la tassa e i risultati vengono raccolti in una nuova lista. Questa lista trasformata può essere utilizzata per ulteriori calcoli, come la generazione di fatture o report finanziari.
Tipo Primitivo
A differenza del metodo map tradizionale, che restituisce uno stream di oggetti, mapToInt(), mapToLong() e mapToDouble() restituiscono stream di tipi primitivi, riducendo il carico di memoria e migliorando le prestazioni.
Esempio pratico
Il seguente esempio converte una lista di stringhe numeriche in stream primitivi e stampa i valori.
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 + " ")); } }
Questo esempio elabora una lista di stringhe numeriche.
Per prima cosa, mapToInt() converte i valori in un IntStream, stampando ogni numero come intero.
Successivamente, mapToLong() crea un LongStream, mantenendo gli stessi valori numerici ma nel tipo long.
Infine, mapToDouble() trasforma i dati in un DoubleStream, convertendo gli interi in numeri decimali.
L'utilizzo di stream primitivi garantisce una gestione efficiente dei dati numerici evitando la creazione non necessaria di oggetti.
1. Cosa fa il metodo map() nello Stream API?
2. Che tipo di interfaccia funzionale dovrebbe accettare il metodo map()?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Trasformazione degli Elementi con il Metodo map()
Scorri per mostrare il menu
Hai già familiarità con il concetto di operazioni intermedie nell'Stream API. Queste operazioni trasformano gli elementi dello stream e restituiscono un nuovo stream senza modificare quello originale. Un metodo di questo tipo è map().
Il metodo map() accetta una Function, che viene applicata a ogni elemento dello stream. I risultati vengono raccolti in un nuovo stream, mentre lo stream originale rimane invariato:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– il tipo di elementi nello stream originale;R– il tipo di elementi nel nuovo stream (dopo la trasformazione).
Fondamentalmente, si passa un tipo T, che viene trasformato in un tipo R. Per questo motivo si utilizza map() quando è necessario modificare il tipo di dato di uno stream.
Applicazione pratica
Supponiamo sia necessario modificare un elenco di prezzi aggiungendo una tassa del 10% a ciascuno. Questo è uno scenario comune nei calcoli finanziari, come l'applicazione dell'IVA ai prezzi dei prodotti.
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); } }
In questo esempio, ogni prezzo nella lista viene aumentato del 10% utilizzando il metodo map().
Ogni valore viene moltiplicato per 1.1 per includere la tassa e i risultati vengono raccolti in una nuova lista. Questa lista trasformata può essere utilizzata per ulteriori calcoli, come la generazione di fatture o report finanziari.
Tipo Primitivo
A differenza del metodo map tradizionale, che restituisce uno stream di oggetti, mapToInt(), mapToLong() e mapToDouble() restituiscono stream di tipi primitivi, riducendo il carico di memoria e migliorando le prestazioni.
Esempio pratico
Il seguente esempio converte una lista di stringhe numeriche in stream primitivi e stampa i valori.
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 + " ")); } }
Questo esempio elabora una lista di stringhe numeriche.
Per prima cosa, mapToInt() converte i valori in un IntStream, stampando ogni numero come intero.
Successivamente, mapToLong() crea un LongStream, mantenendo gli stessi valori numerici ma nel tipo long.
Infine, mapToDouble() trasforma i dati in un DoubleStream, convertendo gli interi in numeri decimali.
L'utilizzo di stream primitivi garantisce una gestione efficiente dei dati numerici evitando la creazione non necessaria di oggetti.
1. Cosa fa il metodo map() nello Stream API?
2. Che tipo di interfaccia funzionale dovrebbe accettare il metodo map()?
Grazie per i tuoi commenti!