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

Java Discussion :

Récupérer la propriété d'un objet qui est dans une List


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Récupérer la propriété d'un objet qui est dans une List
    Bonjour à tous,

    Comment récupérer une propriété "nom" via le getter getNom() d'un objet (user1) que j'ai mis dans une ArrayList

    ( ce que j'ai fais )

    01 - Instanciation de l'objet user1
    02 - Ajout d'un nom avec le SETTER : setNom("tintin")
    03 - Ajouter cet objet user1 dans une ArrayList()
    Dans cet exemple j'aimerai pouvoir récupérer le nom [et seulement le nom] de user1 qui est dans la ArrayList

    Je ne veut pas de toString()

    voici ce que ça donne

    CLASS User

    private String nom ;
    private String prenom ;

    les getter et setter DONT le fameux
    getNom()

    constructeur() // sans args


    Puis j'ai créer une Liste

    List groupe1 = new ArrayList();

    puis j'ai groupe1.add(user1);

    maintenant que mon Objet user1 est dans une liste groupe1

    j'aimerai lister dans une boucle les values des objets

    !!!!! Voici ce que j'aurai aimé faire qui n'existe pas !!!!!! C'est ça la phrase que je cherche ( merci )

    groupe1.user1.getNom() ;
    ou alors

    groupe1.get( user1.getNom() ) ;

    mais parreil ça n'existe pas ... alors comment puis-je ?

    merci de votre aide

  2. #2
    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 : 55
    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,


    Premièrement, tu devrais paramétrer la liste pour faciliter sa manipulation. Ça se fait en déclarant la liste comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<User> groupe1 = new ArrayList<>();
    On précise ici au compilateur qu'on mettra des User dans groupe1, ce qui simplifira leur récupération.

    Ensuite la syntaxe groupe1.user1.getNom() n'aurait de sens que si user1 était un attribut de la classe List. Elle ne risque pas d'avoir d'attribut, puisque List est une interface.
    Pour récupérer une instance dans une liste, on doit passer par son index dans la liste :
    Comment déterminer l'index lorsqu'on a une instance : en utilisant la méthode indexOf() de List.
    En résumé, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String nom = groupe1.get( groupe1.indexOf( user1 ) ).getNom();
    A noter que si groupe1 n'est pas paramétré, il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String nom = ((User)groupe1.get( groupe1.indexOf( user1 ) )).getNom();
    Ceci dit, ça n'a pas grand intérêt, puisqu'on peut faire directement String nom = user1.getNom(); qui est bien plus simple.

    Une liste a pour but de justement stocker plusieurs éléments pour les traiter globalement, par exemple, en parcourant la liste et en faisant quelque chose pour chaque élément de la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(User user : groupe1) {
        System.out.print(user.getNom());
    }
    Pour afficher les noms de tous les utilisateurs dans la liste.

    Traiter un utilisateur particulier de la liste via la liste, qu'on a déjà dans une variable n'a pas d'intérêt, puisqu'on l'a déjà dans la variable.

    On peut se trouver dans la situation où on a par exemple le nom d'un l'utilisateur et on veut le récupérer (exemple en partant du principe que groupe1 est un attribut de la classe dans laquelle on met les méthodes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Optional<User> getUser(String nom) {
       User userCherche=null;
       for(User user : groupe1) {
           if ( user.getNom().equals( nom ) {
              userCherche=user;
              break;
           }
       }
       return Optional.ofNullable(userCherche);
    }
    J'utilise un Optional, parce qu'il est possible qu'il n'y ait aucun utilisateur correspondant au nom dans la liste. Il y a un autre problème qui n'est pas traité ici, c'est qu'il pourrait y avoir plusieurs utilisateurs avec le même nom, et donc le résultat serait plutôt une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public List<User> getUsers(String nom) {
       List<User> liste = new ArrayList<>();
       for(User user : groupe1) {
           if ( user.getNom().equals( nom ) {
              liste.add(user);
           }
       }
       return liste;
    }
    Les 2 codes précédents pouvant être écrits plus simple en Java8 avec les streams :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Optional<User> getUser(String nom) {
        return groupe1.stream().filter(user-> user.getNom().equals(nom)).findFirst();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public List<User> getUsers(String nom) {
        return groupe1.stream().filter(user-> user.getNom().equals(nom)).collect(Collectors.toList());
    }
    Enfin, s'il y a souvent besoin de récupérer un user par son nom, on s'orientera vers une Map plutôt qu'une List.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Qualité de réponse 10/10
    Je te remercie beaucoup d'avoir pris le temps de :
    - M'expliquer si clairement
    - Avoir donné des exemples
    - M'avoir donné d'autres pistes
    - Avoir repris MES données (pour m'aider à parfaitement projeter ce que tu disais)
    - Avoir été aussi rapide à me répondre

    Tu es mon héro ;o)
    Ysumatta

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Pour l'exemple : ceux que ça interesse
    Pour ceux qui veulent un premier exemple concret

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    package presentation;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import metier.User;
     
    public class ListeAvecObjets {
     
    	public static void main(String[] args) {
     
    		List<User> groupe1 = new ArrayList<>();
     
    		User user1 = new User();
    		user1.setPrenom("ysumatta");
    		user1.setNom("KAMACHI");
     
    		User user2 = new User();
    		user2.setPrenom("Yorgen");
    		user2.setNom("WIESTHAR");
     
    		groupe1.add(user1);
    		groupe1.add(user2);
     
    		System.out.println(groupe1.get(groupe1.indexOf( user1) ).getNom() );
     
    	}
     
    }
    Console :
    # KAMACHI

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

Discussions similaires

  1. Ce qui est dans une table mais pas dans l'autre !
    Par youyoule dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/12/2007, 12h57
  2. Savoir si un objet d'une certaine classe est dans une liste
    Par Denti-fritz dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2007, 09h05
  3. Accéder à une variable qui est dans une string
    Par ploxien dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2007, 14h48
  4. appel d'une fonction qui est dans une autre page
    Par guppy33 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/08/2006, 12h05
  5. Réponses: 3
    Dernier message: 22/05/2006, 09h58

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