Transformation des Éléments avec la Méthode map()
Vous connaissez déjà le concept des opérations intermédiaires dans l'API Stream. Ces opérations transforment les éléments du flux et renvoient un nouveau flux sans modifier l'original. L'une de ces méthodes est map().
La méthode map() prend une Function, qui est appliquée à chaque élément du flux. Les résultats sont collectés dans un nouveau flux, tandis que le flux original reste inchangé :
Stream<T> map(Function<? super T, ? extends R> mapper);
T– le type des éléments dans le flux d'origine ;R– le type des éléments dans le nouveau flux (après transformation).
En substance, on transmet un type T, qui est transformé en type R. C'est pourquoi on utilise map() lorsqu'il est nécessaire de modifier le type de données d'un flux.
Application pratique
Supposons qu'il faille ajuster une liste de prix en ajoutant une taxe de 10 % à chacun. Il s'agit d'un scénario courant dans les calculs financiers, comme l'application de la taxe de vente aux prix des produits.
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); } }
Dans cet exemple, chaque prix de la liste est augmenté de 10 % à l'aide de la méthode map().
Chaque valeur est multipliée par 1,1 pour tenir compte de la taxe, puis les résultats sont collectés dans une nouvelle liste. Cette liste transformée peut ensuite être utilisée pour d'autres calculs, tels que la génération de factures ou de rapports financiers.
Type primitif
Contrairement à la méthode map classique, qui retourne un stream d'objets, mapToInt(), mapToLong() et mapToDouble() retournent des streams de types primitifs, réduisant ainsi la consommation mémoire et améliorant les performances.
Exemple pratique
L'exemple suivant convertit une liste de chaînes numériques en streams primitifs et affiche les valeurs.
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 + " ")); } }
Cet exemple traite une liste de chaînes numériques.
Tout d'abord, mapToInt() convertit les valeurs en un IntStream, affichant chaque nombre en tant qu'entier.
Ensuite, mapToLong() crée un LongStream, conservant les mêmes valeurs numériques mais au type long.
Enfin, mapToDouble() transforme les données en un DoubleStream, convertissant les entiers en nombres décimaux.
L'utilisation de streams primitifs garantit une gestion efficace des données numériques tout en évitant la création inutile d'objets.
1. Que fait la méthode map() dans l'API Stream ?
2. Quel type d'interface fonctionnelle la méthode map() doit-elle accepter ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 2.33
Transformation des Éléments avec la Méthode map()
Glissez pour afficher le menu
Vous connaissez déjà le concept des opérations intermédiaires dans l'API Stream. Ces opérations transforment les éléments du flux et renvoient un nouveau flux sans modifier l'original. L'une de ces méthodes est map().
La méthode map() prend une Function, qui est appliquée à chaque élément du flux. Les résultats sont collectés dans un nouveau flux, tandis que le flux original reste inchangé :
Stream<T> map(Function<? super T, ? extends R> mapper);
T– le type des éléments dans le flux d'origine ;R– le type des éléments dans le nouveau flux (après transformation).
En substance, on transmet un type T, qui est transformé en type R. C'est pourquoi on utilise map() lorsqu'il est nécessaire de modifier le type de données d'un flux.
Application pratique
Supposons qu'il faille ajuster une liste de prix en ajoutant une taxe de 10 % à chacun. Il s'agit d'un scénario courant dans les calculs financiers, comme l'application de la taxe de vente aux prix des produits.
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); } }
Dans cet exemple, chaque prix de la liste est augmenté de 10 % à l'aide de la méthode map().
Chaque valeur est multipliée par 1,1 pour tenir compte de la taxe, puis les résultats sont collectés dans une nouvelle liste. Cette liste transformée peut ensuite être utilisée pour d'autres calculs, tels que la génération de factures ou de rapports financiers.
Type primitif
Contrairement à la méthode map classique, qui retourne un stream d'objets, mapToInt(), mapToLong() et mapToDouble() retournent des streams de types primitifs, réduisant ainsi la consommation mémoire et améliorant les performances.
Exemple pratique
L'exemple suivant convertit une liste de chaînes numériques en streams primitifs et affiche les valeurs.
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 + " ")); } }
Cet exemple traite une liste de chaînes numériques.
Tout d'abord, mapToInt() convertit les valeurs en un IntStream, affichant chaque nombre en tant qu'entier.
Ensuite, mapToLong() crée un LongStream, conservant les mêmes valeurs numériques mais au type long.
Enfin, mapToDouble() transforme les données en un DoubleStream, convertissant les entiers en nombres décimaux.
L'utilisation de streams primitifs garantit une gestion efficace des données numériques tout en évitant la création inutile d'objets.
1. Que fait la méthode map() dans l'API Stream ?
2. Quel type d'interface fonctionnelle la méthode map() doit-elle accepter ?
Merci pour vos commentaires !