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 :

Code avec 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 Code avec l'Api Stream
    Bonjour,

    j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Arrays.asList("Fred", "Jim", "Sheila")
        .stream()
        .peek(System.out::println)
        .allMatch(s -> s.startsWith("F"));
    Ce code affiche le résultat suivant:

    Fred
    Jim
    Comment est-ce possible? D’après mes connaissances, la méthode peek affiche le stream des éléments, donc l'affichage, normalement, doit être:

    Fred, Jim, Sheila
    puis en second lieu, allMatch va filtrer les éléments qui commencent avec la lettre F.... mais sans pour autant influencer l'affichage précédent, nn?

    Merci pour votre aide!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    allMatch ne sert pas à filtrer. Il sert à dire si oui ou non, une propriété est vraie pour tous les éléments.
    Quelque part ça ressemble un peu à du filtrage, mais ce n'est ni le but ni l'idée, donc ça ne se comporte pas comme du filtrage.

    allMatch va inspecter chaque élément jusqu'à ce qu'il puisse répondre avec exactitude, "oui" ou "non".
    Si c'est "oui", il va donc inspecter chaque élément, parce qu'il a fallu vérifier pour tous qu'ils correspondent.
    Mais si c'est "non", il va inspecter jusqu'au premier élément qui ne correspond pas. A ce moment-là, il sait que la réponse est "non", et il n'a pas besoin d'en inspecter d'autres. Il s'arrête là.

    Si qui va donc se passer, c'est :
    - Fred est inspecté. Il commence par F. Il faut continuer à inspecter les autres.
    - Jim est inspecté. Il ne commence pas par F. La réponse est "non"
    - Répondre "non".

    Et du coup Sheila n'est jamais inspectée.

    peek() ne va s'appliquer qu'aux éléments qui se retrouvent inspectés dans le stream. Vu que le stream dit de ne pas tous les inspecter, ils ne passeront pas tous par peek().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    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
    Merci pour votre réponse, tout est claire, sauf un petit détail !

    Normalement, c'est de la programmation fonctionnelle, c'est pourquoi on est en train d’utiliser les méthodes de l'API Stream, du coup l'output d'une méthode représente l'input de la méthode qui la suit... Dans notre cas la méthode peek() est avant le allMatch() !!! donc, normalement j'affiche puis j'exécute le allMatch().....

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Cela n'implique en rien qu'il soit nécessaire de passer par tous les éléments.

    Pour un allMatch il n'est pas nécessaire de passer par tous les éléments. Ça n'empêche pas que le peek() sur les éléments par lesquels on passe bel et bien, est fait avant de traiter allMatch().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    pour faire simple (enfin je crois)
    si tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Arrays.asList("Fred", "Jim", "Sheila")
        .stream()
        .peek(System.out::println)
    rien ne va s´afficher.
    car speek sans destination ne fait rien.
    bon maintenant tu lui dis de tester si tout les elements de ta liste commencent par la lettre 'F'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Arrays.asList("Fred", "Jim", "Sheila")
        .stream()
        .peek(System.out::println)
        .allMatch(s -> s.startsWith("F"));
    alors des le moment ou il rencontre un element de la liste qui ne commence pas par la lettre 'F',
    il va s´arreter.
    et retourner non a la question que tu lui auras poser.

    il n´aura plus besoin de parcourir toute la liste car il a la reponse a ta question.


    J´espere que cela est clair.

    Eric

Discussions similaires

  1. [Toutes versions] Compréhension de code avec API
    Par antonysansh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/10/2015, 07h47
  2. Réponses: 5
    Dernier message: 27/02/2013, 14h00
  3. Comment linker avec odbc32.lib dans le code ? (avec gcc)
    Par _Audrey_ dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/11/2008, 17h40
  4. Interfaçage avec les API de cdrtools
    Par jeanbi dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 17/07/2004, 16h35
  5. [UML] génération de code avec omondo.uml
    Par RENAULT dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/10/2003, 13h14

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