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 :

[Collection] trier une liste ou un set


Sujet :

Collection et Stream Java

Vue hybride

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 247
    Par défaut [Collection] trier une liste ou un set
    Bonjour je dispos d'un HashSet et j'aimerais le trier selon un champ (montant) particulier.
    La classe contenue dans ce Hashset implémente l'interface Comparable et la méthode compareTo est définie. Voila le 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
    public class SponsorArgent extends Sponsor implements IsSerializable, Comparable {	
    	private Double montant;
     
    	/**
             * Contructeur de la classe SponsorArgent
             * Constructeur vide necessaire pour implementer IsSerializable
             */
    	public SponsorArgent(){
    	}
     
    	/**
             * Contructeur de la classe SponsorArgent
             * Construit le sponsor de type argent
             * @param nom
             * Nom du sponsor
             * @param adresse
             * Adresse du sponsor
             * @param url
             * URL du logo du sponsor
             * @param contribution
             * Type de contribution du sponsor
             * @param montant
             * Montant du sponsor
             */
    	public SponsorArgent(String nom, String adresse, String url,
    			String contribution, Double montant) {
    		super(nom, adresse, url, contribution);
    		this.montant=montant;
    	}
     
    	/**
             * getAdresse recupere le montant du sponsor
             * @return Retourne le montant du sponsor
             */	
    	public Double getMontant() {
    		return montant;
    	}
     
     
     
    	@Override
    	public int compareTo(Object o) {
    		// TODO Auto-generated method stub
    		SponsorArgent sp= (SponsorArgent)o;
    		return (montant.compareTo(sp.getMontant()));
    	}	
     
    }
    Ensuite j'ai besoin de trier cette collection
    Je recupere ce hashset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HashSet<Sponsor> listeSponsor = appli.getMesSponsors();
    et je la trie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(listeSponsor);
    mais sort est souligné en rouge dans eclipse .

    quelqu'un pourrait -il m'aider svp ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Parce que sort prend en paramètre une List et non pas un Set.

  3. #3
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Utilise un TreeSet si tu désires une Set trié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set<Sponsor> listeSponsor = appli.getMesSponsors();
    et la méthode getMesSponsors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Set<Sponsor> getMesSponsors() {
    Set<Sponsor> listeSponsor = new TreeSet<Sponsor>();
    //remplissage du set
    return listeSponsor;
    }
    EDIT: j'ai lu un peu trop vite mais c'est la classe Sponsor( et non ses sous-classes) qui devrait implémenter Comparable quitte à la rendre abstraite.

    Banzai

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 247
    Par défaut
    j'ai modifié mes classes, et seule la classe mère implémente l'interface comparable.
    J'ai redéfini la méthode compareTo dans les sous-classes. J'aimerais conserver mon HashSet.
    voici la definition de la méthose compareTo dans la sous-classe qui m'intéresse:
    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
    public class SponsorArgent extends Sponsor implements IsSerializable {	
    	private Double montant;
     
    	/**
             * Contructeur de la classe SponsorArgent
             * Constructeur vide necessaire pour implementer IsSerializable
             */
    	public SponsorArgent(){
    	}
     
    	/**
             * Contructeur de la classe SponsorArgent
             * Construit le sponsor de type argent
             * @param nom
             * Nom du sponsor
             * @param adresse
             * Adresse du sponsor
             * @param url
             * URL du logo du sponsor
             * @param contribution
             * Type de contribution du sponsor
             * @param montant
             * Montant du sponsor
             */
    	public SponsorArgent(String nom, String adresse, String url,
    			String contribution, Double montant) {
    		super(nom, adresse, url, contribution);
    		this.montant=montant;
    	}
     
    	/**
             * getAdresse recupere le montant du sponsor
             * @return Retourne le montant du sponsor
             */	
    	public Double getMontant() {
    		return montant;
    	}
     
     
     
    	@Override
    	public int compareTo(Object o) {
    		// TODO Auto-generated method stub
    		SponsorArgent sp= (SponsorArgent)o;
    		return (montant.compareTo(sp.getMontant()));
    	}
     
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     HashSet<SponsorArgent> listeSponsorArgent = new HashSet<SponsorArgent>();
    et j'aimerais trier ceci en faisant cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.sort((List<SponsorArgent>) listeSponsorArgent);

  5. #5
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    1 - Peux tu faire l'effort d'utiliser les balises [ CODE] [/CODE] (bouton #)

    2 - Pourquoi veux tu absolument utiliser un HashSet plutot qu'un TreeSet ?

    3 - si tu tiens vraiment a faire comme tu as dis, voici la solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(new ArrayList(listeSponsorArgent));
    Le problème c'est que tu ne pourras pas récupérer le résultat
    Donc si tu veux récupérer le résultat tu pourras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List maListeTriee = new ArrayList(listeSponsorArgent)
    Collections.sort(maListeTriee);
    Tes éléments seront triés dans la variable maListeTriee.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 247
    Par défaut
    merci pour la réponse, j'ai pas testé encore. Désolé pour les balises, j'ai zappé...
    mes plus plates excuses.

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

Discussions similaires

  1. Trier une liste avec Collections.sort(liste)
    Par nakry dans le forum Collection et Stream
    Réponses: 18
    Dernier message: 25/09/2013, 15h52
  2. trier une list
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 23/03/2006, 12h01
  3. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17
  4. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44

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