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

avec Java Discussion :

Parcours De HashSet


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut Parcours De HashSet
    Bonjour à tous, voila je me retrouve avec un problème d'algorithme qui me prend la tete depuis un petit moment et je me decide donc à poster sur le forum afin d'avoir un peu d'aide.
    Alors voila le principe, j'ai 2 LinkedHashSet contenant des strings.
    La premiere appelons la SetComplete contient toutes les donnes dont j'ai besoin, sous cette forme (et dans cette ordre):
    ID1 Data1 Data2 Data3 Data4 ID2 Data5 Data6 (evidemment elle peut etre bien plus grande mais le principe est le meme, nous avons d'abord l'ID suivi de ses donnees rattachées)
    La deuxieme, appelons la SetID contient les ID:
    ID1 ID2
    En gros je voudrais pouvoir parcourir la SetComplete, et a chaque fois que je tombe sur un ID, recuperer tous les elements jusqu'au prochain ID et stocker ca dans une list par exemple en les separant par une chaine de caractere predefini avant...Cette liste dans mon exemple serait:
    Data1 Data2 Data3 Data4 "###" Data5 Data6
    Est ce clair?
    Merci beaucoup de votre aide!

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Quelque chose comme ça ?

    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
    List<String> datas = new ArrayList<String>();
     
    StringBuilder builder = new StringBuilder();
    boolean first = true;
     
    for(String str : SetComplete){
        if(SetID.contains(str) && !first){
            datas.add(builder.toString();
            builder.setLength(0);
     
            first = false;
        }
     
        builder.append(str).append("--");
    }
    Par contre ta structure de données me semble un peu lourde. Tu ne peux pas passer par des objets avec des id ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Merci de ta reponse mais ca ne marche pas...pour plusieurs raison a vrai dire.
    1°) Le boolean est à true par defaut donc la condition !first ne serait jamais verifié donc on ne rentrera jamais dedans...
    2°)en supposant qu'on teste qu'il est true et non false, on ajoute dans la liste un stringbuilder vide et ensuite on le passe a false donc on ne rentrera plus jamais dans la condition...
    Enfin l'idée est la c'est sur, il manque quelques trucs je pense...
    Encore merci de ton aide

    Thomas

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    J'ai juste pas mis le booléen à false au bon endroit :

    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
    List<String> datas = new ArrayList<String>();
     
    StringBuilder builder = new StringBuilder();
    boolean first = true;
     
    for(String str : SetComplete){
        if(SetID.contains(str) && !first){
            datas.add(builder.toString();
            builder.setLength(0);
        }
     
        first = false;
     
        builder.append(str).append("--");
    }
    mais après, c'est clair qu'on doit pouvoir faire mieux.

    par exemple avec un iterator :

    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<String> datas = new ArrayList<String>(SetID.size());
     
    StringBuilder builder = new StringBuilder();
     
    Iterator<String> iterator = SetComplete.iterator();
     
    builder.append(iterator.next());
     
    while(iterator.hasNext()){
        String str = iterator.next();
     
        if(SetID.contains(str)){
            datas.add(builder.toString());
            builder.setLength(0);
        }
     
        builder.append(str).append("--");
    }
     
    builder.append(str).append("--");
    datas.add(builder.toString());
    Mais ça reste quand une structure de données inélégante.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Merci de ton aide...
    Pour l'instant je recupere une liste comme cela:
    ID1--Data1--Data2--Data3--Data4
    Au lieu de
    Data1 Data2 Data3 Data4 -- Data5 Data6
    Je vois pas exactement comment modifié le code pour y arriver, j'ai essaye quelques truc mais je pers certaines données...
    Merci encore,
    Thomas

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    De plus dans ton code, tu reecris
    builder.append(str).append("--");
    Mais en dehors de la boucle while, donc str n'a plus de sens...
    De plus dans ma liste je ne veux pas les ID...
    Merci beaucoup!

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Comme ceci ?
    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
    List<String> datas = new ArrayList<String>();
     
    StringBuilder builder = new StringBuilder();
    boolean first = true;
     
    for(String str : SetComplete){
        if(SetID.contains(str)){
     
            if (builder.length() > 0) {
               if (!first) {
                  datas.add("--");
               }
               datas.add(builder.toString());
               builder.setLength(0);
               first = false;
            }
        } else {
           builder.append(str).append(" ");
        }
    }
     
    if (builder.length() > 0) {
       if (!first) {
          datas.add("--");
       }
       datas.add(builder.toString());
    }

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Merciii!
    Alors on y est presque sauf que je souhaiterai (c'est ma faute je l'ai mal expliqué) que chaque element soit dans une "case" de la liste c'est à dire:
    Data1,Data2,Data3,Data4,--,Data5,Data6
    Et finir par -- soit:
    Data1,Data2,Data3,Data4,--,Data5,Data6,--
    Merci infiniment!

  9. #9
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    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
    16
    17
    18
    List<String> datas = new ArrayList<String>();
    boolean first = true;
     
    for(String str : SetComplete){
        if(SetID.contains(str)) {
               if (!first) {
                  datas.add("--");
               }
               first = false;
            }
        } else {
           datas.add(str);
        }
    }
     
    if (!first) {
       datas.add("--");
    }

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Parfait ! Merci beaucoup !

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

Discussions similaires

  1. HashSet, probleme de doublon et parcour
    Par fusion_sadam dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2007, 15h07
  2. [Debutant(e)]Pb parcours de tableau
    Par joquetino dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 22/09/2004, 09h08
  3. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 22h57
  4. Ordre de parcours de l'arbre...
    Par Sylvain James dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 01/12/2002, 18h41
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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