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 :

Liste de Liste !


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut Liste de Liste !
    Bonjour

    Je suis bloqué par un truc qui doit etre simple pour les developpeurs chevronnés en java ...
    J'ai une liste nommée FicheInfoXML qui recupere des infos (du type string et integer) d'un fichier XML. Chaque FicheInfoXML est une fiche produit.

    La methode utilisee pour injecter les infos dans ma fiche produit est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FicheInfoXML.add(indice, ValeurRecuperee)
    J'aimerais recuperer une fiche generale qui contient toutes ces fiches !! Mon idee est de creer une autre liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List ToutesLesFiches=new ArrayList();
    .. mais je n'arrive pas à ranger ces fiches comme pour FicheInfoXML !!?!!

    Comment puis je faire pour que chaque fiche FicheInfoXML soient rangées par indice dans ToutesLesFiches ?

    Voici le code :
    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
    
        static org.jdom.Document document;
       static Element racine;
       
       static List FicheInfoXML=new ArrayList();
       static List ToutesMesFiches=new ArrayList();
       
       static SAXBuilder sxb = new SAXBuilder();
        
       // Recuperation des champs du fichier XML ouvert
       static void LitXML(){
    	  List ListeFiche = racine.getChildren("FICHE");
              Iterator i = ListeFiche.iterator();
          
          while(i.hasNext())
          {
             Element MonElement = (Element)i.next();
             
             FicheInfoXML.add(0,(String)MonElement.getChild("Type").getText());
             FicheInfoXML.add(1,(String)MonElement.getChild("categorie").getText());
                 FicheInfoXML.add(2,(String)MonElement.getChild("interprete").getText());
                 FicheInfoXML.add(3,(String)MonElement.getChild("titreAlbum").getText());
            
             }
    
            // Ici, j'aimerais ajouter la liste FicheInfoXML dans ma liste ToutesLesFiches !??
    
                      
       }
    Merci pour votre aide !!! Je n'y arrive pas !

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Je t'arrête tout de suite!

    Une liste contenant des choux et des carottes gérées par le positionnement (indice 0 = id, indice 1 = nom, indice 2 = age...), c'est ce qui se faisait avant la POO, mais c'est à proscrire maintenant.

    A la place ta liste, fabrique-toi une classe (un Bean) FicheInfo dont les attributs correspondent aux différentes informations que tu mettais dans ta liste...

    Ensuite, on rediscutera d'une liste de tes fiches (qui a mon avis sera un objet de la classe "Fiches" que tu vas créer... et qui contiendra un attribut listant tes fiches )
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Ok CyberChouan (desole, je suis pas un expert en POO mais je me soigne lol).

    Je me suis trompé : ma fiche ne contient QUE des attributs de type String (pas de choux avec des carottes).

    J'ai en effet créé une classe UneFiche qui contient tous les attributs que je recupere de mon fichier XML. Faut il que je nomme absolument tous les attributs un par un, ou puis je quand meme garder mes attributs sous forme de Liste ?

    Voici ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    static List FicheInfoXML=new ArrayList();
    static Element racine;
     
    UneFiche(Element MonElement){	
        FicheInfoXML.add(0,(String)MonElement.getChild("Type").getText());
        FicheInfoXML.add(1,(String)MonElement.getChild("categorie").getText());
        FicheInfoXML.add(2,(String)MonElement.getChild("interprete").getText());
        FicheInfoXML.add(3,(String)MonElement.getChild("souscat").getText());
    }
    Parce qu'en gardant ca sous forme de liste, j'arrive toujours pas a recuperer ce que je veux ?!

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Franchement, je te suggère plutôt un Bean vu tes besoins.

    Tu t'apercevras vite que ça va simplifier énormément ton code (et le rendre beaucoup plus compréhensible)

    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
     
    public class Fiche {
     
      private String type;
      private String categorie;
      private String interprete;
      private String souscat;
     
      public void setType(String type) { this.type = type; }
      public String getType() { return type; }
      // Autres accesseurs sur le même modèle
     
      public void chargerFicheDepuisElementXML(Element e) {
        setType(e.getChild("Type").getText());
        // invocation des autres setters sur le même modèle
      }
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    oups, moi pas tout avoir compris (connais pas les Beans) mais je vais me pencher sur la question alors ...

    Merci pour le conseil et les infos en tout cas ...

  6. #6
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    un bean c est juste un objet qui sert en quelque sort de conteneur

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Quelle difference avec une classe alors ?

  8. #8
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Un bean est une classe ! cette classe ayant pour role de contenir des objets (et répondant à certaines normes, enfin documente toi si ca t interesse ).
    Le mot classe est très vague, c est pourquoi on parle de bean dans ce cas la

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Ok, je me suis renseigné ...
    Ca me semble quand meme assez lourd cette méthode non ?
    Enfin, je sais pas, a premiere vue, je ne vois pas l'interet des Beans par rapport à ma classe de depart ... (mais je vais creuser - pas du style à me reposer sur mes lauriers lol)

    Merci a vous deux

  10. #10
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    L interet ici c est que tu es en Java => POO

    Imagine que tu doives transmettre tes données à quelqu'un (ta liste FicheInfoXML ). Tu prefere lui dire "c'est une liste de String avec à la premiere place "Type" etc... ou lui dire je te file un objet "Fiche" (je reprend l'ex de CyberChouant), les données qui sont dedans sont décrits par les getters.

    Imagine que tu ais à ajouter un nouvel objet dans ta liste qui ne soit pas une String. Tu risques d'avoir des problèmes en 1.5, de plus tu va passer ton temps à caster etc. Avec le bean tu rajoute un champ et les getter / setter associés et c 'est réglé.

    De plus, une list est un conteneur abstrait. SI tu implémentes tous tes objets en List, comment va tu t y retrouver quand tu aura 15 listes avec des objets différents à chaque position ?

    En ce qui concerne la lourdeur, on obtient une liste avec N beans.
    Tu obtient une liste contenant N liste. Quel est le plus lourd entre une liste et sa complexité et un bean contenant 3 champs ?

    Bref a toi de voir, je ne pense pas qu'à l'heure actuel tu ai "l'esprit" pour coder en Objet, j espere que ca a changer un peu

    a+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Oui, c'est clair que je n'ai certainement pas encore l'esprit "Objet"; j'essaie pourtant !
    En fait, si je te suis bien, pour avoir l'esprit objet, mieux vaut etre le plus precis possible et decrire tout ce qui doit etre decrit plutot que de passer par des listes avec des indices que seul le developpeur pourra a la rigueur comprendre et relier à tel ou tel variable...

    Pour ma Fiche, je n'ai pas 3 champs, mais 20 ! (j'ai pris l'exemple d'une fiche avec 3 champs pour ne pas surcharger la question).
    Donc (dis moi si je me trompe), mieux vaut creer 20 variables pour les reperer et les recuperer facilement via leurs noms (type, categorie, nom etc..) que d'utiliser une liste avec pour chaque variable, un indice ...?

    (en fait, c'est ce que j'avais fait au depart, mais je me suis dit que le code allait etre gros en terme de lignes de code... seulement, je crois comprendre que l'esprit objet, c'est de privilegier la comprehension et la facilité d'acces aux variables et objets au compactage du code).

    Tu crois que j'avance là, en terme d'esprit Objet ?

  12. #12
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par pepito31
    Pour ma Fiche, je n'ai pas 3 champs, mais 20 ! (j'ai pris l'exemple d'une fiche avec 3 champs pour ne pas surcharger la question).
    Donc (dis moi si je me trompe), mieux vaut creer 20 variables pour les reperer et les recuperer facilement via leurs noms (type, categorie, nom etc..) que d'utiliser une liste avec pour chaque variable, un indice ...?
    Tout à fait. Et chacun avec son type...

  13. #13
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    oui c'est ca.
    Si tu regarde les normes des bean, il y a entre autre :
    pour chaque champ privé nommé nomduchamp, un getter nommé getNomduchamp.
    de cette maniere tu c'est ce que tu récupère, et le type de ce que tu récupère (type de retour de la fonction) !

    le but d'un code, cest qu'il soit le plus flexible et comprehensible possible.

    maintenant en terme de lignes de codes, alors oui tu aura un objet avec 20 champs, 20 getters et 20 setter, mais tellement simple à comprendre et à maintenir. si tu laisse ton projet a kkun, il va tout de suite comprendre a koi sert cet objet et comment l utiliser.

    franchement tu prefere objet.getCategory() ou list.get( "c est quoi deja l'id de la category")

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Ok merci a vous pour ces explications....
    Je crois que je comprends mieux l'idee.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Me voila de retour.
    J'ai donc créé ma classe Fiche avec les 20 setters et 20 getters.
    Ces fiches sont lues, une à une, depuis un fichier XML.

    Comment puis je recuperer toutes mes fiches en memoire (utilisation de List) ??

    Merci

  16. #16
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    A chaque fiche que tu créé, tu créé donc un objet. Cet objet tu l ajoute dans une liste,puis tu passe à l objet suivant, comme dans n imoprte quel langage.

    Niveau algo ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    je cree une liste
    for(j ai des objets dans mon fichier xml)
      je lis l objet
      je cree mon bean
      j ajoute mon bean dans ma liste
    a la sortie du for ta liste contient tous tes beans.
    Bref de la prog basique

  17. #17
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Oui, là pour le coup, tu peux utiliser un type List.
    Si tu est en 1.5, tu pourras typer comme cela (c'est un exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<MonBeanFiche> maListDeFiches = new ArrayList<MonBeanFiche>();
    Ce qui veut dire que chaque occurence de ta liste représentera une fiche (une instance de ta classe MonbeanFiche).

    Pour remplir ta liste tu pourras utiliser l'algo du post ci-dessus.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    SUPER !!
    Merci a vous tous !!

    et desole pour mes questions idiotes.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Re !

    Comment puis je trier ma liste de Fiches simplement ? J'ai vu qu'avec une Collection, on avait acces a la methode sort(List, Comparator) ...

    Ma liste de fiches etant créée, comment puis je la trier par "type" par exemple, en utilisant les methodes existantes ?

    Pour etre le plus propre possible et le plus Objet possible, dois je le faire dans la boucle de lecture de chacune de mes fiches (avec des if / else Fiche.getType("MonType").equals("TypeVoulu")) ou puis je trier l'ensemble de mes fiches avec une methode de type sort apres la boucle ?

    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
     
         racine = document.getRootElement();
         List ListeFiche = racine.getChildren("FICHE");
         Iterator i = ListeFiche.iterator();
     
         List<Fiche> MaListeFiche=new ArrayList<Fiche>();
         int j=0;
     
         while (i.hasNext()){
    	 Element MonElement = (Element)i.next();
    	 Fiche MaFiche=new Fiche(MonElement);
    	 // Alimentation de la liste des fiches
    	 MaListeFiche.add(j,MaFiche);
    	j++;
    	}
    D'autre part, savez vous comment je peux utiliser directement l'Iterator i en tant qu'indice de ma liste (plutot que de me trimballer un autre indice j) ?

    Merci

  20. #20
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Slt
    Un bon point, tu as trouvé la bonne méthode Collection.sort
    Pour l'utiliser, tu dois lui donner une liste et un comparator, c ce dernier qu'il te manque, a toi de l'ecrire !
    Pour cela, faisons simple : ecrit une classe qui implémente Comparator<Fiche> (on va la nommer TypeComparator), dans laquelle tu redéfini la fonction compareTo(fiche1, fiche2)
    Dans cette methode, tu l'a qu'a choisir comment tu compare. Si tu souhaite comparer selon ton champ type, tu n a qu'a retourner fiche1.getType().compareTo(fiche2.getType()) (avec un toLowerCase si tu souhaite ignorer la casse).

    voila et tu crée autant de classe que de comparator souhaité, juste change la méthode compareTo. (il y a bien une solution avec des classes anonymes mais je pense qu'on va t'embrouiller ^^)

Discussions similaires

  1. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 15h07
  2. Liste de liste?
    Par Bethoring dans le forum C++
    Réponses: 4
    Dernier message: 16/11/2005, 19h19
  3. Liste de listes
    Par SteelBox dans le forum Prolog
    Réponses: 5
    Dernier message: 16/10/2005, 17h21
  4. acceder au n iéme element d'une liste std::list
    Par sorari dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/03/2005, 16h21
  5. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 15h00

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