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 :

Algorithme -Fusionner des lignes d'un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut Algorithme -Fusionner des lignes d'un tableau
    Bonjour à tous,

    J'ai un souci pour trouver un algo convenable. Je vous explique mon souci avec un exemple.
    Je dispose d'un tableau de ce style :

    Nom Numero
    ----------------------------------
    1 nom1 24
    2 nom2 26
    3 nom2 38
    4 nom3 17
    5 nom4 42

    et je voudrais avoir ceci :

    Nom Numero
    ----------------------------------
    1 nom1 24
    2 nom2 26, 38
    4 nom3 17
    5 nom4 42

    Je voudrais donc comparer chaque ligne du tableau et dès que j'ai pour chaque ligne, pour la colonne "Nom" une valeur identique à la valeur de "Nom" de la ligne précédente, je les fusionne pour faire une ligne et je concatène les autres colonnes.
    Toutes mes données sont des Strings.

    Merci beaucoup

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Bonjour à tous,

    J'ai un souci pour trouver un algo convenable. Je vous explique mon souci avec un exemple.
    Je dispose d'un tableau de ce style :

    Nom Numero
    ----------------------------------
    1 nom1 24
    2 nom2 26
    3 nom2 38
    4 nom3 17
    5 nom4 42

    et je voudrais avoir ceci :

    Nom Numero
    ----------------------------------
    1 nom1 24
    2 nom2 26, 38
    4 nom3 17
    5 nom4 42

    Je voudrais donc comparer chaque ligne du tableau et dès que j'ai pour chaque ligne, pour la colonne "Nom" une valeur identique à la valeur de "Nom" de la ligne précédente, je les fusionne pour faire une ligne et je concatène les autres colonnes.
    Toutes mes données sont des Strings.

    Merci beaucoup
    Tout d'abord il serait plus utile pour cela d'avoir une liste. je suppose qu'il existe une classe représentant une ligne (je vais l'appeler Ligne)
    Donc ça donne avec des noms de méthode qui permettront de les coder facilement. On suppose bien entendu que le tableau (la liste) est triée sur le nom
    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
     
    Ligne prec = tableau.get(0);
    String info = prec.getNumero;
    List<Ligne> nouveauTableau = new ArrayList<Ligne>();
     
    for (int i = 1 ; i < tableau.getSize() ; i++)
    {
          Ligne cour = tableau.get(i);
          if (prec.getNom().equals cour.getNom()) info += ", " + cour.getNumero();
          else 
         {
              nouveauTableau.add(new Ligne(prec.getIndex(), prec.getNom(),info));
              info = cour.getNom();
         }
    }
    Non testé et fait de tête mais ça doit marcher : c'est un problème fréquent.

    Pour remplir une liste à partir d'un tableau on a je crois
    liste.addAll(tableau);
    C'est en respectant les autres que l'on se fait respecter.

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Quelle est la structure que tu utilise pour ton tableau ? Car j'ai un peu de mal a comprendre ce que tu entends par "colonne" ? C'est un tableau à 2 dimensions ?

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Desolé, je me suis mal exprimé. Il s'agit d'une liste d'objets. (Personne par exemple)

    @Patrice Henrio : Merci pour ta réponse mais j'ai du mal à voir ce que tu fais avec ta variable info, une fois qu'elle est renseignée dans ta boucle.

  5. #5
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    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
     
    listTemp = list.clone();
    for (Iterator<monObjet> iter1=listTemp.iterator();iter1.hasNext())
    {
    	monObjet obj1 = iter1.next();
    	for(Iterator<monObjet> iter2=list.iterator();iter2.hasNext()){
    		monObjet obj2 = iter2.iterator();
    		if ( !obj1.getId().equals(obj2.getId()) /*Si ce n'est pas la même ligne*/ && obj1.getNom().equals(obj2.getNom())/* Mais qu'il ont le même nom */	
    			obj1.setNumero(obj1.getNumero()+", "+obj2.getNumero(); // On concatene
    		iter2.remove(); // On supprime l'élément en doublon
    	}
    }
    Bon c'est pas très esthétique mais ça devrait marcher.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Desolé, je me suis mal exprimé. Il s'agit d'une liste d'objets. (Personne par exemple)

    @Patrice Henrio : Merci pour ta réponse mais j'ai du mal à voir ce que tu fais avec ta variable info, une fois qu'elle est renseignée dans ta boucle.
    Comme indiqué dans le code tu t'en sers pour créer une nouvelle ligne dans le nouveau tableau. Il y a d'ailleurs deux fautes de frappe dans ce que je t'ai proposé :

    nouveauTableau.add(new Ligne(prec.getIndex(), prec.getNom(),info));
    C'est en respectant les autres que l'on se fait respecter.

Discussions similaires

  1. [DOM] Rajouter des ligne a un tableau sous IE
    Par ldcarpathes dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 14/08/2006, 16h55
  2. Alterner les couleurs des lignes d'un tableau
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/06/2006, 21h13
  3. [HTML] Hauteur des lignes d'un tableau
    Par leloup84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/03/2006, 10h46
  4. Cacher des lignes d'un tableau
    Par frechy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/07/2005, 12h05
  5. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28

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