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 :

Résultat d'exécution de 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 Résultat d'exécution de Stream
    Bonsoir,

    j'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    joueurs.stream().filter(e->e.getNom().startsWith("s")).peek(System.out::println).findFirst();
    En fait, j'ai 2 questions:

    1- c'est quoi le rôle de la méthode peek ici?

    2- Comment est-ce possible d'avoir un affichage (le résultat est affiché correctement) alors que j'ai pas appliqué la méthode ifPresent(Consumer cs) après le findFirst()?

    Merci en avance!

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    la méthode peek() produit un flux qui appliquera automatiquement l'action passée en paramètre sur chacun des éléments lors que le contenu du flux sera consommé. L'affichage est totalement indépendant de la valeur retournée par findFirst(), il a lieu automatiquement car tu as invoqué une méthode finale. Vu que tu invoques findFirst() qui est final, il peut y avoir 0-1 affichage (0 dans le cas ou le flux est vide et 1 car cette méthode finale termine immédiatement après le 1er élément rencontré).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  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
    Vu que tu invoques findFirst() qui est final, il peut y avoir 0-1 affichage (0 dans le cas ou le flux est vide et 1 car cette méthode finale termine immédiatement après le 1er élément rencontré).
    D'accord, mais pourquoi dans cet exemple, je dois mettre ifPresent() après findfirst(), je parle de l'utilité de ifPresent?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    joueurs.stream().filter(s->s.getName().startsWith("s")).findFirst().ifPresent(s->System.out.println(s));

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Ben, c'est pour indiquer, dans le cas où un élément est trouvé, ce que tu veux en faire.

    Tu peux appeler findFirst(), mais tu n'es pas obligé de le faire.
    findFirst() te donne un Optional. Tu peux te servir de cet Optional de la manière qui te chante. En appelant ifPresent() dessus, ou bien en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(opt.isPresent()) {
      Object monBidule = opt.get();
      seServirDe(monBidule);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Et la valeur retournée est optionnelle car lorsque le flux est vide il n'existe pas de résultat donc aucune valeur a retourner : l'Optional reçu est vide donc l'action d'impression ne s’exécute pas, ce qui est la même chose que le code posté par @thelvin juste au-dessus, juste que ici c'est une forme plus condensée.

    Le but de l'utilisation d'Optional c'est entre autres d’éviter de générer des NullPointerException par mégarde car on aurait oublier de tester si la valeur reçue est null ou pas.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. [C#][SQLServer]Résultat d'exécution d'une requête sur SQLServer
    Par Chakalaka dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/04/2010, 12h32
  2. [CR 2008] Envoi du résultat d'export en streaming !
    Par tarekos dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 26/06/2008, 10h12
  3. Exécuter un Stream
    Par Daok dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/10/2007, 22h24
  4. Réponses: 3
    Dernier message: 16/10/2005, 11h53
  5. Conserver la fenêtre résultat de l'exécution
    Par ndoye_zaff dans le forum ANT
    Réponses: 3
    Dernier message: 01/03/2004, 16h02

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