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

Langage Java Discussion :

Recherche d'un élément dans une liste


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Points : 90
    Points
    90
    Par défaut Recherche d'un élément dans une liste
    Bonjour,

    Je souhaite trouver un object dans une list comportant un parametre.
    Comment puis-je m'y prendre?

    Exemple d'object:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class NodeM {
     
     
        protected String id;
        protected String kind;
    }
    Je souhaiterais retourner l'object avec kind = spaceNode (il n'y en a qu'un dans la liste: List<NodeM> nodes).
    Merci à vous

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Salut,

    Voici comment proceder avec java 7 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (NodeM nodeM : nodeMList) {
    if ("spaceNode".equals(nodeM.getType()) ) {
    return nodeM;
    }
    }
    return null;
    Java 8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return nodeMList.stream().filter(p -> p.getType().equals("spaceNode")).findFirst();
    Ce return renvoi un objet Optional qui peut contenir ou non l'objet repondant au filtre. Pour savoir si un tel objet existe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(theOptional.isPresent())

  3. #3
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Points : 90
    Points
    90
    Par défaut
    merci à toi,

    Mais en Java 8, je peux retourner directement l'object?
    optional.get() ?

    Merci

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si tu écris NodeM spaceNode = nodeMList.stream().filter(p -> p.getType().equals("spaceNode")).findFirst().get();, tu risques d'avoir une NoSuchElementException si aucun node n'a été trouvé. Si tu es sûr que dans tous les cas, il y aura forcément un "spaceNode", tu peux.
    Eventuellement, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeM spaceNode = nodeMList.stream().filter(p -> p.getType().equals("spaceNode")).findFirst().get().orElseGet(()->null);
    Mais il te faudra tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( spaceNode!=null ) {
     // traiter
    ]
    Donc autant écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Optional<NodeM> spaceNode = nodeMList.stream().filter(p -> p.getType().equals("spaceNode")).findFirst();
    if ( spaceNode.isPresent() ) {
       // traiter
    }
    Ou plus simple, le cas échéant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nodeMList.stream().filter(p -> p.getType().equals("spaceNode")).findFirst().ifPresent( spaceNode-> {
    /*traiter*/
    });
    Tu peux également le traiter directement sans passer par l'optional :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nodeMList.stream().filter(p -> p.getType().equals("spaceNode")).forEach(spaceNode-> {
    /*traiter*/
    });
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Rechercher élément dans une liste
    Par totot dans le forum Général Java
    Réponses: 4
    Dernier message: 17/11/2015, 23h01
  2. Problème de recherche des éléments dans une liste.
    Par amine1980 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 09/04/2011, 23h34
  3. Recherche d'un élément dans une liste triée (vitesse)
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/05/2006, 09h23
  4. [debutant] insertion d'éléments dans une List
    Par gwenou60 dans le forum Composants
    Réponses: 1
    Dernier message: 05/12/2005, 09h59
  5. contrôler l'absence d'un élément dans une liste donnée
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2005, 10h02

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