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

Java Discussion :

Trier une List contenant des noms et prénoms


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut Trier une List contenant des noms et prénoms
    Bonjour à tous !

    J'ai beau regarder de nombreux sites mais je ne comprend rien ! C'est très compliqué de s'en sortir tout seul . J'ai une list d'un tableau de String qui contient des noms et prénoms, je dois remplir un JTable en ordonnant la civilité (ce qui me paraît logique), j'ai regardé de nombreux forum (francophone et anglo-saxon ... j'ai pas encore essayé l'allemand) et je ne comprend rien !!! CompareTo, Compare, ListComparator, ... Rien mais rien mais rien à comprendre, je pense qu'il faut naître avec un cerveau d'Einstein.

    Je vais mettre un bout de code sans pour autant savoir si ça va vous aider mais merci d'avance à tous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private static List<String[]> listCustomer;
     
     
    // Là j'ajoute mes données à l'attribut de type List<String[]>, ça fonctionne sans problème
    listCustomer = ScanCustomer.getList();
     
    // Maintenant je ne sais pas quoi faire
    public void ?????

  2. #2
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    Bonjour,

    je pense que dans la FAQ java tu trouveras de quoi réussir.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Hello,

    Bon, là c'est surtout de la méthodologie, alors on va prendre un peu de recul.
    À mon avis, le problème c'est plutôt...

    Citation Envoyé par Jb_One73 Voir le message
    J'ai une list d'un tableau de String qui contient des noms et prénoms,
    Ça, le problème. Une List<String[]>. Java est un langage objet, on fait pas des choses pareilles. Du coup, on trouve pas tellement d'aide en ligne pour faire ce que personne ne fait.

    Ce qu'il te faut, c'est :
    - créer une classe Personne, qui contient un nom et un prénom
    - faire une List<Personne>.

    Maintenant faisons un exemple :

    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 Tracteur {
      private final String marque;
      private final String proprietaire;
     
      public Tracteur(String marque, String proprietaire) {
        this.marque = marque;
        this.proprietaire = proprietaire;
      }
     
      public String getMarque() {
        return marque;
      }
     
      public String getProprietaire() {
        return proprietaire;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class TestTracteur {
      public static void main(String... args) {
        List<Tracteur> tracteurs = new ArrayList<>();
        tracteurs.add(new Tracteur("Renault", "Michel"));
        tracteurs.add(new Tracteur("Peugeot", "Raymond"));
        tracteurs.add(new Tracteur("Peugeot", "Bernard"));
     
        for(Tracteur tracteur : tracteurs) {
          System.out.println(tracteur.getMarque() + " de " + tracteur.getProprietaire());
        }
      }
    }
    On a des objets et une liste de ces objets. Des données organisées clairement, pas des espèces de listes de tableaux incompréhensibles que personne ne veut voir et dont personne ne parlera.

    Bien. Maintenant je veux trier cette List<Tracteur> par ordre de marque. On va pas mélanger toutes les marques.
    Depuis Java 1.8, et si on a bien organisé ses données, c'est tout simple. On utilise sort() sur la List, en fournissant une lambda qui explique comment on trie deux Tracteur l'un par rapport à l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tracteurs.sort((t1, t2) -> {
      return t1.getMarque().compareTo(t2.getMarque());
    });
    Et voilà ! tracteurs, ma List<Tracteur>, est maintenant triée par ordre de marque. Si on l'affiche à nouveau, on peut voir que les Peugeot sont affichés avant, parce que P est avant R.


    Accessoirement, et en conclusion, c'est normal qu'on ne puisse pas tout faire au début juste avec des tutoriels, il faut poser des questions (et en fait avoir des cours avec un prof et un bouquin c'est pas du luxe.)
    C'est important de travailler avant, mais demander est indispensable aussi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par thelvin Voir le message
    public class Tracteur
    Ca, c'est vraiment pour ne pas faire son boulot à sa place

    Par contre, les lambdas c'est peut etre un peu violent pour un débutant.
    En fait, ce qu'à fait thelvin revient à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Collections.sort(tracteurs, new Comparator<Tracteur>() {
            @Override
            public int compare(Tracteur t1, Tracteur t2)
            {
     
                return  t1.getMarque().compareTo(t2.getMarque());
            }
        });

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Ca, c'est vraiment pour ne pas faire son boulot à sa place
    Je ne vois pas du tout de quoi tu parles.</mensonge>

    Citation Envoyé par hwoarang Voir le message
    Par contre, les lambdas c'est peut etre un peu violent pour un débutant.
    Comprendre de quoi il s'agit et comment les faire soi-même, certainement.

    Les lire dans un exemple tout fait qui fonctionne et refaire leur contenu, ça me semble au contraire bien plus facile pour un débutant que la même chose avec des classes anonymes. Au départ c'est un peu pour ça que tout le monde adire les lambdas.
    À condition bien sûr d'avoir Java 1.8 -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    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,

    +1 pour les lambdas, c'est plus facile dans le sens où ce n'est pas pollué par plein de code "inutile".

    Au passage pour créer un Comparator on peut également utiliser la méthode comparing() :
    Ainsi l'équivalent de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tracteurs.sort((t1, t2) -> {
      return t1.getMarque().compareTo(t2.getMarque());
    });
    Peut s'écrire de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tracteurs.sort( Comparator.comparing(Tracteur::getMarque) );
    Son gros intérêt c'est de pouvoir chainer plusieurs critères facilement, par exemple pour comparer par marque puis pas propriétaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	    tracteurs.sort( Comparator.comparing(Tracteur::getMarque)
    	    		.thenComparing(Tracteur::getProprietaire) );

    a++

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Je viens de me rendre compte que je me suis un peu lâché dans ce message donc je vais mettre tout de suite ma question parce que j'ai peur que vous n'alliez pas jusqu'à la fin.

    Thélvin, tout d'abord merci pour ton aide, j'ai une question concernant la dernière méthode que tu as noté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tracteurs.sort((t1, t2) -> {
      return t1.getMarque().compareTo(t2.getMarque());
    });
    Je dois la mettre où ? Dans la classe Tracteur (je ne pense pas plutôt dans la classe où j'ai besoin de comparer) ?

    Ouh ! Là ! Alors tout d'abord MERCI à tous pour vos réponses surtout à thelvin (je ne porte pas de favoris mais il m'a apporté beaucoup d'explications et d'exemples). Après je voulais pas faire de polémique mais c'est vrai que thelvin à raison enfin pour moi, avoir un exemple concret avec des explications et beaucoup plus facile que des écris. L'interprétation de chacun n'est forcément la même que le rédacteur et on part vite fait en live ! J'en suis connaisseur.

    Que des gens comme vous m'apportent du soutient et de l'aides est très important ! C'est un peu comme si on donnait un livre à un enfant qui ne sait ni lire ni écrire et que l'on lui demande de rédiger l'histoire.
    Sans les bases et l'apprentissages ... je ne vois pas comment faire ??? Je ne veux pas passer pour Caliméro mais tout seul ... je n'ai que vous pour m'en sortir ! Je galère tellement que je passe des heures entières à essayer de trouver comment mettre en oeuvre un simple trie (exemple de ce post) dont d'ailleurs une partie de ce qu'à noté thelvin m'échappe mais je vais en parler.

    Pour finir :
    Je débute en Java et j'ai un projet à mettre sur pied et rendre au plus tard le 8 mars, à la vitesse où vont les choses j'ai peur d'y arriver mais j'aurai fait mon max. Dans mon UE et environ 50, les 3/4 ont d'excellente notions car soit ils en ont fait, soit ils ont fait du C# et une minorité comme moi galère ! Après leur demander du soutient tient du miracle (je ne veux pas critiquer mais c'est la réalité) après je comprend que chacun à ses priorités et je ne les réfutes pas. Je prend sur moi et j'essaie au de faire le mieux que je peux et quand je galère (en général quand je passe au minimum 2h dessus) je post un message sur ce forum et les personnes comme vous m'apporte du soutient et j'en suis très fier.

    Je vous remercie à tous de m'apporter autant de réponses et d'explication qui restent une preuve de professionnalisme, encore un grand MERCI !

  8. #8
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Les lire dans un exemple tout fait qui fonctionne et refaire leur contenu, ça me semble au contraire bien plus facile pour un débutant que la même chose avec des classes anonymes. Au départ c'est un peu pour ça que tout le monde adire les lambdas.
    Mouais, je dois me faire trop vieux ^^
    Mais j'avoue qu'entre le symbole -> et les 2 parametres sans type, j'ai toujours trouvé ca un peu...
    Bref, je me dis qu'en tant que débutant, c'est pas forcément facile à comprendre au premier coup d'oeil. Mais je reconnais qu'une fois qu'on y est habitué, ca simplifie pas mal le code

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

Discussions similaires

  1. Trier une liste contenant une paire ?
    Par Muetdhiver dans le forum C++
    Réponses: 6
    Dernier message: 01/04/2009, 23h42
  2. Créer une liste à partir des noms des feuilles
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/08/2008, 19h38
  3. Réponses: 7
    Dernier message: 13/09/2007, 16h22
  4. Remplir une liste avec des noms de fichiers
    Par Claude_Azoulai dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/09/2007, 09h00
  5. Créer une liste avec des noms de fichiers
    Par Jeffboj dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 06h48

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