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 :

trier une liste d'objets dans une ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut trier une liste d'objets dans une ArrayList
    Bonsoir,
    Voila, je veux trier une liste d'objets Personne , j'ai donc chercher sur le net
    et je n'arrive pas à avoir ma liste triés.
    Voic mon code :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    public static void main(String[] args) {
    	liste1.add(new Personne (1,"dupont","jean"));
    	liste1.add(new Personne (5,"martin","joseph"));
    	liste1.add(new Personne (4,"martinet","alain"));
    	liste1.add(new Personne (3,"andre","gilles"));
    	liste1.add(new Personne (5,"Zachari","philippe"));
     
    	Collections.sort(liste1);
    	for (Iterator iter = liste1.iterator(); iter.hasNext();) {
    	    Personne p   = (Personne) iter.next();
    	    System.out.println("id = " + p.getId() + " nom = " + p.getNom() + " prenom = " + p.getPrenom());
    	} 
     
    } 
    ...............
    public class Personne  implements Comparable {
    private long id=0;
    private String nom=null;
    private String prenom=null;
     
     
    public Personne(long id, String nom, String prenom) {
    	super();
    	this.id = id;
    	this.nom = nom;
    	this.prenom = prenom;
    }
    /**
     * @return the id
     */
    public long getId() {
    	return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(long id) {
    	this.id = id;
    }
    /**
     * @return the nom
     */
    public String getNom() {
    	return nom;
    }
    /**
     * @param nom the nom to set
     */
    public void setNom(String nom) {
    	this.nom = nom;
    }
    /**
     * @return the prenom
     */
    public String getPrenom() {
    	return prenom;
    }
    /**
     * @param prenom the prenom to set
     */
    public void setPrenom(String prenom) {
    	this.prenom = prenom;
    }
    /**
     * CompareTo : Permet de trier par nom prénom 
     */
    public int compareTo(Object o) // on redéfinit compareTo(Object)
    {
      Personne p=(Personne)o;
      if(nom.equals(p.nom))
      {    
        return prenom.compareTo(p.prenom);
      }
     return nom.compareTo(p.nom);
    }
     
    }
    Et ça donne cela :
    id = 5 nom = Zachari prenom = philippe
    id = 3 nom = andre prenom = gilles
    id = 1 nom = dupont prenom = jean
    id = 5 nom = martin prenom = joseph
    id = 4 nom = martinet prenom = alain


    Pourtant je l'ai au boulot sur des objets plus complexes et ça fonctionne !!


    D'abord quelqu'un peut-il me dépanner et ensuite me dire comment on fait pour avoir un second critère de tri pour cette liste (par exemple tri sur prénom, nom)
    Merci bcp

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut
    Je n'ai rien dit , mon tri se passe bien , je n'avais pas vu la majuscule sur "Zachari"

    Ma question reste toujours si je veux trier cette même liste avec d'autres critères

    De plus je n'arrive pas bien à comprendre comment ça fonctionne en général.
    Comment java sait-il qu'il s'agit d'une liste d'objet "Personne" car j'aurais très bien mettre dans cette liste une liste d'objet "véhicules" par exemple?

  3. #3
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Il faut utiliser l'autre variante de Collections.?sort qui prend en plus de la liste un java.util.Comparator.

    Il te faut donc implémenter un Comparator<Person> qui compare 2 personnes selon les critères qui te veux.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut
    Merci mais peux tu me donner quelques précisions par rapport à mon exemple

    avec un tri par nom/ prénom
    et un tri par prenom/nom

    J'ai bien cherché sur le net mais j'avoue que je ne comprends pas très bien
    Comment écrire les 2 méthodes dans ma classe Personne ?
    Comment appeler chacun des tris avec Collection.sort

    Merci

  5. #5
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut
    Bonjour,
    Oui j'avais bien vu cette faq, mais j'ai du mal à mettre en application. Je suis débutante,je commence à maitriser les Arraylist et les manipulations d'objet.
    Peu de formation et des délais trop court qui empêchent l'approfondissement d'ou une utilisation de ce qui a été fait dans d'autres applications sans trop chercher à comprendre du moment que ça marche !
    D'ou bon nombre de recherche sur son temps perso !

    Donc si j'ai bien compris , il faut utiliser des map et non des arraylist pour trier ? ce qye je ne vois pas trop bien comment le mettre en place
    Il faudrait aussi en plus de la classe Personne créer autant de classe "PersonneComparator implements Comparator<Long>{" ?

    Le problème dans mon application (pas l'exemple que j'ai donné), on utilise des Arraylist (en fait ce sont le résultat de requêtes hibernate), ensuite j'effectue une traitement sur ces listes et c'est après que je dois les trier et selon le cas les critères de tri sont différents. Jusquà maintenant ça marche car je n'ai qu'un critère de tri par type d'objet mais là on me demande de trier une liste d'objets de plusieurs façon selon le cas.


    Merci à tous

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/02/2010, 14h05
  2. Réponses: 10
    Dernier message: 07/01/2010, 13h53
  3. Chercher un objet dans une liste d'objet
    Par Axiome dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/10/2008, 09h43
  4. Réponses: 2
    Dernier message: 29/05/2008, 15h59
  5. Savoir si un objet d'une certaine classe est dans une liste
    Par Denti-fritz dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2007, 09h05

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