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 :

ListIterator et ajout


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Par défaut ListIterator et ajout
    Bonsoir,

    Je réfléchis à un mini-programme très simplifié qui réalise des pseudos arbres généalogiques a partir d'une base de données. Pour expliquer, je vais prendre un exemple.

    Soit le morceau de code suivant :
    L'ArrayList listePers contient les noms des personnes sans ascendant. Pour notre exemple, supposons qu'elle contient Ned Flanders et Grandpa Simpson. Pour chaque membre de la liste, on va taper en BDD pour voir si cette personne a des descendants. On ajoute chacun de ces descendants à la liste.

    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
     
    PreparedStatement pst = null;
    ResultSet rs = null;
     
    ListIterator<String> li = listePers.listIterator();
     
    pst = c.prepareStatement(reqDescendants);
     
    			while(li.hasNext())
    			{
    				String unNom = li.next();
     
    				pst.setString(1, unNom);
    				rs = pst.executeQuery();
     
    				while(rs.next())
    				{
    					String unAutreNom = rs.getString("nom");
     
    					li.add(unePersonne);
    				}
    			}
    Ce code marchera très bien pour Ned Flanders : ses deux fils seront ajoutés sans problème.

    Pour Grandpa ça marchera un peu moins bien : Homer et son frère seront bien ajoutés mais Lisa, Bart et Maggie ne le serons pas.

    En effet, d'un point de vu technique, si j'ai bien compris la javadoc, Homer sera ajouté à la liste avant l'itérateur et ne sera donc jamais traité à son tour.

    Vu la richesse de Java, il doit y avoir une solution que je ne connais pas ...

    Merci d'avance.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Erm...

    Non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Par défaut
    J'y ai bien pensé. Mais cela pose au moins 1 problème :

    Combien de previous dois-je faire ? Dans le cadre de mon exemple précèdent, Homer et son frère vont être ajoutés. Il faudra donc deux previous pour être sur d'avoir leur enfant ... mais pour un exemple avec 3 freres ... 5 freres, 0 ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pas faux. Suffirait de compter, mais c'est vrai que c'est moche.

    Bon, pour un truc de ce genre, il ne te suffit pas d'une liste. Il t'en faut deux :
    - Une qui contient les personnes que tu as fini d'analyser ou que tu es en train d'analyser, dans l'ordre.
    Au début elle est vide, et tu y ajoutes les personnes au fur et à mesure.
    - Une qui contient les personnes qu'il te reste à analyser.
    Au début elle contient ceux qui n'ont pas d'ascendant. Puis tu en retires la première personne, et en l'analysant, tu ajoutes les descendants de cette personne au début de la pile des personnes à analyser.
    Je recommande une LinkedList, car elle implémente Deque, une logique de pile LIFO, où on peut empiler et dépiler des choses.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je ne comprend pas trop ton algo : quel intérêt y a-t-il à charger les personnes par arbres généalogiques si c'est pour tous les stocker dans une simple liste !?

    Il serait préférable d'opter pour une structure de donnée plus adapté à tes besoins...


    a++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Par défaut
    adiGuba : a cause d'un mappage objet/relationnel foireux sur lequel je peux plus agir ...

    thelvin : j'ai réfléchis à ton idée de previous. Il y a autant de previous a faire qu'il y a d'itérations dans la boucle qui ajoute un descendant depuis la base de données (while (rs.next()). J'ai donc mis un li.previous a la fin de ce while (juste après li.add(unePersonne); ) et ça fonctionne. Merci.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  3. [VB6] [ADO] Pb ajout enregistrement table liée
    Par fikou dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/10/2002, 11h49
  4. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48
  5. Ajouter une aide
    Par Mailgifson dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/06/2002, 13h32

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