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 :

ordonner un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut ordonner un tableau
    Salut à tous,
    j'ai besoin de votre aide dans le problème suivant:
    je veux ordonner un tableau qui contient deux colonnes : le nom et la valeur
    il faut que j'ordonne le tableau selon le nom(ordre alphabétique) puis selon la valeur si il existe quelques noms identique par exemple:
    le tabelau suivant ordonné selon ordre alphabétique

    nom |valeur
    ____________
    aat | 0
    ba | 3
    cc | 4
    cc | 2
    cc | 1
    dg | 3

    moi je veux:
    nom |valeur
    ____________
    aat | 0
    ba | 3
    cc | 1
    cc | 2
    cc | 4
    dg | 3
    Mais je ne sais pas comment je le faire ?? aidez-moi svp.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Montre nous déjà ce que tu as essayé, quel algorithme de tri as-tu voulu utilisé, quel résultat tu obtiens.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    vous avez raison monsieur tchiz normalement il faut que je vous donne une essaye mais j'ai pas trouvé une idée, j'ai réussi à ordonner le tableau par ordre alphabétique mais pour passer un deuxième colonne !!!!!!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ben montre déjà ton code à une colonne

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    Il y a plusieurs façons de répondre à cette question. Une idée pourrait être de faire un bean qui contiendrait les attributs nom / valeur. Il implémenterait l'interface comparable. Tu pourrais ensuite faire un Collections.sort(taliste).

    Bon courage

    ++

    Mathieu

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Points : 31
    Points
    31
    Par défaut
    En supposant que tu ne travailles pas avec une table associative, mais avec un tableau de tableaux de String de dimension 2, et que tu as déjà effectué le tri sur ta première colonne, ce que tu as ensuite essentiellement à faire, c'est chercher la plage des indices pour lesquels tes clé sont identiques (la boucle for de la ligne 9). Une fois que tu as cette plage, tu as les bornes entre lesquelles implémenter un algo de tri similaire à celui que tu as utilisé pour trier ta première colonne.
    Sauf erreur, tu devrais avoir quelque chose comme ça :
    Code java : 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
    31
    32
     
    public class Tri{
        public static void main(String[] args){
            String[][] tab = {{"at", "0"}, {"ba", "5"}, {"ba", "7"}, {"ba", "3"}, {"cc", "4"}, {"cc", "2"}, {"cc", "1"}, {"dg", "3"}};
     
            int i = 0;
            while(i < tab.length - 1){
                int cles_consecutives = 0;
                for(int j = i; j < tab.length - 1 && tab[j][0] == tab[j+1][0]; j++){
                    cles_consecutives++;
                }
     
                if(cles_consecutives > 0){
                    for(int j = i; j < i + cles_consecutives; j++){
                        String element_courant = tab[j + 1][1];
                        int k = j;
                        for(; k >= i && Integer.parseInt(tab[k][1]) > Integer.parseInt(element_courant); k--){
                            tab[k + 1][1] = tab[k][1];
                        }
                        if(k < j){
                            tab[k + 1][1] = element_courant;
                        }
                    }
                    i += cles_consecutives;
                }
                else{
                    i++;
                }
            }
            affiche(tab);
        }
    }

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    Salut à tous,
    merci pour vos réponses.

    @ tchiz Ben montre déjà ton code à une colonne
    ben j'ai fait la chose suivant (j'ai utilisé la programation objet ):
    pour ordonner les noms alphabétiquement j'ai utilise ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static Comparator<Obj> objComparator = new Comparator<Obj>() {
     
    	public int compare( Obj o1, Obj o2)
    	  {
    	     String lenom1 = o1.getNom().toUpperCase();
    	     String lenom2 = o2.getNom().toUpperCase();
    		 //ascending order
    		 return lenom1.compareTo(lenom2);
     
    	  }
     
    };
    et
    Collections.sort(table, Obj.objComparator);
    alors monsieur tchiz j'atteds votre aide

    @Influenza Il y a plusieurs façons de répondre à cette question. Une idée pourrait être de faire un bean qui contiendrait les attributs nom / valeur.
    c'est quoi un bean ?

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    Merci monsieur flip_ pour ta réponse, j’essayerai et je vous dit le résultat.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonsoir,

    Tu avais fait 90% du chemin. Tu as comparé tes objets uniquement sur le nom. Il faut aussi que quand le nom est égal tu compares sur la valeur. Il te suffit de changer ton code en :
    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
     
    public static Comparator<Obj> objComparator = new Comparator<Obj>() {
     
    	public int compare( Obj o1, Obj o2)
    	  {
    	     String lenom1 = o1.getNom().toUpperCase();
    	     String lenom2 = o2.getNom().toUpperCase();
     
                 int resultatCompareNom = lenom1.compareTo(lenom2)
     
                 //ascending order
                 if(resultatCompareNom  != 0){
                     // cas où le les noms ne sont pas égaux
    		 return resultatCompareNom;
                 }else{
                    // cas où les noms sont égaux, il faut comparer sur la valeur
                   return o1.getValeur() - o2.getValeur();
                 }	 				         	
    	  }
    };
    Je suis parti du principe que tu triais dans l'ordre ascendant.

    Romain.

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    Merci infoniment monsieur rg77140 pour ton aide.
    Mais j'ai pas bien compris le signe " - "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return o1.getValeur() - o2.getValeur();

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Le "-" effectue une soustraction entre deux entiers.

    L'attribut "valeur" de la classe Obj est de quel type ? Comme c'était des chiffres dans ton poste j'ai assumé que c'était des int ou des Integer. Du coup l'utilisation du "-" est justifiée. Si tu as mis "valeur" dans un String remplace "o1.getValeur() - o2.getValeur()" par "o1.getValeur().compareTo(o2.getValeur())".

    compare doit renvoyer un chiffre positif si o1 est supérieur à o2, 0 si o1 est égal à o2, un chiffre négatif si o1 est inférieur à o2.

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    OK merci pour l'explication, oui "valeur" est de type int. Je suis entrain de vérifie votre code normalement il marche on verra après.

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    Merci monsieur rg77140 le code est marche bien et merci tout le monde.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    De rien ! Oublie pas de passer le sujet en "résolu" ;-)

  15. #15
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Citation Envoyé par loudji Voir le message
    c'est quoi un bean ?
    Sinon pour information, un bean en Java, c'est une classe qui ne contient que des attributs avec des getter / setter sur chacun d'eux pour y accéder. Ca permet essentiellement de stocker de l'information. A priori c'est ce que tu avais fait même si tu ne connaissais pas le terme

    ++

    Mathieu

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Plus précisément, un java bean obéis à certaines règles:

    1) il doit exister un constructeur sans paramètres
    2) il possède des propriétés qui doivent accessibles par des méthodes get/set/is (pour les booleans). l'absence de set indique que la propriété est en lecture seule
    3) il devrait être serializable

  17. #17
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Points : 51
    Points
    51
    Par défaut
    @Influenza et tchize_ merci pour l'explication vous avez enrichi la discussion plus

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

Discussions similaires

  1. ordonner un tableau associatif selon une colonne
    Par hoolako dans le forum PL/SQL
    Réponses: 4
    Dernier message: 10/03/2010, 18h43
  2. Ordonner un tableau (ok sous FF, rien sous ie)
    Par nauax dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/06/2009, 14h09
  3. Ordonner un tableau à 2 dimensions
    Par gilal dans le forum PL/SQL
    Réponses: 3
    Dernier message: 10/11/2008, 17h06
  4. [MySQL] ordonner un tableau
    Par The Free Man dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/08/2008, 15h09
  5. Réponses: 4
    Dernier message: 11/02/2008, 14h32

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