IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Différence entre la fonction map() et reduce() de l'API stream


Sujet :

avec Java

  1. #1
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut Différence entre la fonction map() et reduce() de l'API stream
    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

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    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 :

    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);
    ce qui se simplifie en ceci :

    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);
    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
    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);
    ce qui se simplifie en :

    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);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelle est la différence entre les fonctions Hxxxx et SQLxxxx?
    Par THOMAS Patrice dans le forum WinDev
    Réponses: 2
    Dernier message: 30/07/2010, 12h40
  2. [XL-2003] Différence entre les fonctions Round() Excel et VBA ?
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2010, 16h22
  3. Ou est l'erreur - ou une différence entre une fonction et une macro ?
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 08h35
  4. Différence entre une fonction shared et un module
    Par amirad dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/11/2009, 18h45
  5. Différence entre deux fonctions
    Par camboui dans le forum C++
    Réponses: 13
    Dernier message: 17/06/2008, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo