Bonsoir,
je voudrais savoir la différence entre les 2 méthodes map() et reduce() de l'API stream de JAVA 1.8? surtout en terme de fonctionnalités et domaine d'utilisation.
Merci en avance
Bonsoir,
je voudrais savoir la différence entre les 2 méthodes map() et reduce() de l'API stream de JAVA 1.8? surtout en terme de fonctionnalités et domaine d'utilisation.
Merci en avance
Hello,
leur point commun, c'est qu'on peut les appeler toutes les deux sur une Stream. Leurs différences, c'est absolument tout le reste.
Normalement on demande la différence entre deux choses semblables, pour savoir pourquoi on prendrait l'un et pas l'autre. Il n'y a rien de semblable entre ces deux méthodes, quelle que soit la manière dont on regarde.
reduce(), c'est juste son nom, est l'opération de réduction de la Stream. Elle prend les éléments de la Stream et s'en sert pour calculer un résultat final attendu sur ces éléments. Par exemple s'il n'y a avait pas déjà une méthode sum(), tu pourrais utiliser reduce() pour calculer la somme des int d'une stream. Tu pourrais utiliser reduce() pour multiplier tous les éléments ensemble.
On dit que la réduction d'une Stream est une opération terminale. Avant tu avais ta Stream avec des éléments qu'elle fournit, après tu as consommé ta Stream et utilisé ses éléments pour produire ce que tu voulais en faire. Elle n'est donc plus utilisable.
map() est une opération intermédiaire. Elle indique des trucs à faire avec les éléments de la Stream, mais la Stream est toujours là, pas consommée, et aucun résultat n'a encore été produit.
En l'occurrence map() dit de transformer les éléments de la Stream en d'autres.
Exemple, si tu as une Stream<String> et que tu veux traiter les éléments de cette Stream mais en majuscules, tu peux faire comme ça :
ce qui se simplifie en ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 List<String> list = Arrays.asList("bonjour", "hello", "guten tag"); Stream<String> stream = list.stream(); Stream<String> upperStream = stream.map(s -> s.toUpperCase(Locale.ROOT)); upperStream.forEach(System.out::println);
map() n'est pas obligée de garder le même type de données. Par exemple si tu veux transformer des Integer en leur version texte, tu peux faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Arrays.asList("bonjour", "hello", "guten tag") .stream() .map(s -> s.toUpperCase(Locale.ROOT)) .forEach(System.out::println);
ce qui se simplifie en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); Stream<Integer> stream = list.stream(); Stream<String> stringStream = stream.map(i -> i.toString()); stringStream.forEach(System.out::println);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Arrays.asList(1, 2, 3, 4, 5, 6, 7); .stream(); .map(i -> i.toString()); .forEach(System.out::println);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager