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

Collection et Stream Java Discussion :

Problème avec des ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut Problème avec des ArrayList
    Bonsoir,

    je suis totalement novice en java et plus exactement en programmation objet, d'ou ma question dans ce forum

    Je vais posé la question le plus simple possible sans entré dans les détails, pour le moment

    J'ai une Classe Animaux
    + une Classe Chat extends Animaux
    + un Classe Chien extends Animaux
    + une Classe Canarie extends Animaux

    Je veux créer une arrayliste pour chaque classe filles

    Au début j'ai pensé faire pour chaque Arrayliste un classe, par exemple un classe ListeChat, ListeChien, ListeCanari.

    pour chaque classe il y a les méthodes suivant:
    - méthode pour afficher les objet
    - méthode pour rechercher une animal avec son nom
    - méthode pour supprimer une animal


    Mais lors ma formation ont m'a bien expliqué qu'il ne fallait pas se répété D.R.Y (don't repeat yourself)

    Mais je ne trouve pas le moyen de crée des arrayliste sans me répété.

    pouvez-vous m'aider svp

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Tu n'as qu'a englobé ton arrayList dans une classe et y mettre les méthodes que tu veux. Ou tu fais une classe utilitaire qui a des méthodes faisant ce que tu veux.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    List<Chien> listeChiens = new ArrayList<Chien>();

    Rien de plus à faire.

  4. #4
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    List<Chien> listeChiens = new ArrayList<Chien>();

    Rien de plus à faire.
    Oui, c'est ce que j'ai pensé au début, mais a chaque fois il vas falloir que je fasse les même méthodes pour chaque Arrayliste par exemple pour chiden

    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
     
    List<Chien> listeChiens = new ArrayList<Chien>();
     
    //ajouter un chien a la liste
    public void ajouter(Chien chien){
     
         listeChien.add(chien);
     
    }
     
    //rechercher un chien dans la liste
    public void rechercherChien (String nomChien){
     
          for (Chien c : listeChien) {
          if(c.getNomChien.equals(nomChien)
               c.affiche(); // affiche etant un methode dans chien pour affiché son nom son age etc??
          }
     
    }
     
    public void supChien() {.....etc
    Donc pour chaque arrayliste je doit mettre ces méthodes, mais vu que se sont presque les mêmes, pour moi c'est de la répétition, corrigez moi si je suis dans la faux.

    J'ai aussi fait un essai avec un arrayliste d'Object, mais la ça c'est compliqué car il m'etait impossible de faire appelle au méthode qui sont dans les classe chat, chien, canari, comme la méthode affiche();

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    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
    public class Groupe<T extends Animaux>{
        private List<T> liste = new ArrayList<T>();
        public void add(T animal){
            liste.add(animal);
        }
        public T recherche(String nom){
          for (T t : liste) {
            if(t.getNom().equals(nom)
               t.affiche();
               return t;
            }
          return null; // pas trouvé
        }
        // etc....
    }
    tout simplement.

  6. #6
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    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
    public class Groupe<T extends Animaux>{
        private List<T> liste = new ArrayList<T>();
        public void add(T animal){
            liste.add(animal);
        }
        public T recherche(String nom){
          for (T t : liste) {
            if(t.getNom().equals(nom)
               t.affiche();
               return t;
            }
          return null; // pas trouvé
        }
        // etc....
    }
    tout simplement.
    Merci pour ta réponse rapide,

    Je vais testé et vous tenir au courant

  7. #7
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    Je viens de tester, et cela fonctionne bien!! sauf que je ne peut pas récupérer les infos des classes filles de la classe Animaux.

    Par exemple dans la classe
    chat il ya "private String charCelebre;"
    dans chien "private int nbrDent;"
    dans canarie "private boolean sexe;"


    donc pas les même données (je suppose que c'est fait délibérément de la part du formateur)

  8. #8
    Membre confirmé
    Homme Profil pro
    Expert MDE
    Inscrit en
    Janvier 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 183
    Par défaut
    Hello,

    Et ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void affiche(T animal) {
    for (Method m: animal.getClass().getMethods()) {
    if (m.getName().startsWith("get") && and !m.getName().equals("getClass")) {
    System.out.println("resultat de la methode:" + m.getName() + ":" + m.invoke(animal));
    }
    }
    }
    C'est de tête, mais on ne doit pas en être loin.

    Prochaine,

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tcharl: on ne résoud pas un problème d'héritage par l'api reflection!

    pony99: en quoi la classe "groupe" aurait besoin de ces données? Seul celui qui manipule directement un Chien ou un Chat en a besoin, mais dans ce cas il sait déjà ce qu'il manipule. Ta classe groupe ne fait que faire du stockage et fournir 3 méthodes générale (ajout, recherche, suppression). Et pour ça les méthodes de "Animaux" lui suffisent amplement.

  10. #10
    Membre confirmé
    Homme Profil pro
    Expert MDE
    Inscrit en
    Janvier 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 183
    Par défaut
    Sinon, tu as plus simple que la généricité pour répondre à ton besoin: l'héritage .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Animal {
    private String nom;
    public void affiche() {
    System.out.println("Nom:" + nom);
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Chien extends Animal{
    private String nbDents;
     
    public void affiche() {
    super.affiche();
    System.out.println("Nb dents:" + nbDents);
    }
    }
    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
     
    public class AnimauxDAO{
    private List<Animal> animaux;
     
    public void ajouter(Animal animal){
     
         animaux.add(animal);
     
    }
     
     
    public void recherche (String nom){
     
          for (Animal a : animaux) {
          if(c.getNom().equals(nom))
               c.affiche();
          }
     
    }
     
    public void sup() {.....etc
     
    }
    Si tu ne veux afficher que les chiens:
    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
     
    public class ChiensDAO extends AnimauxDAO{
     
    public void recherche (String nom){
     
          for (Animal a : animaux) {
          if(c.getNom().equals(nom) && (c instanceof Chien))
               c.affiche();
          }
     
    }
     
    public void sup() {.....etc
     
    }
    Ici il n'y a pas plusieurs liste, mais une seule.
    On peut quand même facilement récupérer les chiens par le biais du mot est "instanceof".

  11. #11
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    oula ça commence a se corsé pour moi .
    Je relis ça pour bien assimilé et je réponds (après ma réunion)

  12. #12
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    @tchize_ en fait j'ai besoin de ces donnée pour les afficher après dans un fenêtre.

    @Tcharl c'est sur que ta solution fonctionne, mais cela reviendrai au même qu'en faisant la solution de tchize_ en faisant un extends non sur animaux mais sur chien directement

    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
    public class Groupe<T extends Chien>{
        private List<T> liste = new ArrayList<T>();
        public void add(T chien){
            liste.add(chien);
        }
        public T recherche(String nom){
          for (T t : liste) {
            if(t.getNom().equals(nom)
               t.affiche();
               return t;
            }
          return null; // pas trouvé
        }
        // etc....
    }

  13. #13
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    RE

    Bon j'ai pu résoudre le problème.
    Merci a tchize_ qui m'a donné le bonne solution.
    car j'avais oublié que l'appel d'une méthode "affiche()" par exemple, qui se trouve dans la superClasse (animaux) et dans les classes dérivées (Chien), c'est celle de chien qui est appelé, et dans ce fait les données se trouvant dans chien sont bien récupérés.

    Merci encore pour votre aide très précieuse.

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

Discussions similaires

  1. Problème d'algo avec des arraylist
    Par samuel4256 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/03/2011, 23h48
  2. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17
  3. Réponses: 5
    Dernier message: 19/08/2004, 11h11
  4. [STRUTS] Problème avec des ActionForm
    Par zarbydigital dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/03/2004, 13h49
  5. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26

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