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 de multiple manière


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut Trier une liste de multiple manière
    Bonjour,

    J'ai besoin de trier une List.

    Pour cela j'ai implémenté ma classe avec la méthode compareTo(..);

    Cependant j'ai besoin de la trier de nouveau dans un ordre différent.

    Comment faire ???

    Merci

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


    Utilises les Comparator

    a++

  3. #3
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Tu a la function arrays.sort(tableau);
    qui est bien pratique aussi

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Salut,
    Pour changer dynamiquement "ta façon de trier", tu peux t'intéresser au modèle de conception état (state pattern). En fonction de la situation dans laquelle tu te trouves, tu utilises un comparateur approprié.
    Bonne continuation.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Utilises les Comparator

    a++
    Oui je veux utiliser cette interface mais avec plusieurs méthodes compareTo je ne vois pas comment faire.

  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
    Quel est le problème exactement ? Car il n'y a rien de bien compliqué :

    1. Pour chaque type de tri que tu veux, tu écris une classe qui implémente Comparator et qui met en place la comparaison de ton choix
    2. Tu utilises Collections.sort(List,Comparator) pour effectuer le tri


    a++

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    D'acord mais je ne vois pas tout encore excatement.

    Lorsque j'ai un tri je fais hérité ma classe 'voiture' de l'interface comparator en implémentant la méthode compareTo. Puis j'utilise Collections.sort(List)

    maintenant que j'en ai plusieurs tu me dis d'écrire ma classe Compare qui implémente Comparator, d'écrire plusieurs classes compareTo1, compareTo2...
    et d'appeler la methode Collections.sort(List,Comparator.compareTo1)???

    Merci

  8. #8
    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
    Citation Envoyé par xduris Voir le message
    Lorsque j'ai un tri je fais hérité ma classe 'voiture' de l'interface comparator en implémentant la méthode compareTo. Puis j'utilise Collections.sort(List)
    Ici il s'agit de Comparable et non pas de Comparator.
    Comparable permet de définir sur un objet l'ordre naturel de ce type.

    Citation Envoyé par xduris Voir le message
    maintenant que j'en ai plusieurs tu me dis d'écrire ma classe Compare qui implémente Comparator, d'écrire plusieurs classes compareTo1, compareTo2...
    et d'appeler la methode Collections.sort(List,Comparator.compareTo1)???
    Oui : les Comparator permettent de définir des ordres de comparaisons alternatif, différent de l'ordre par défaut.

    a++

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    D'accord, donc je fais hérité ma classe 'vehicule' de la classe 'Comparator' et j'implémente 2 méthode compareTo1 et compareTo2.

    ensuite j'appelle Collections.sort(List,Comparator.compareTo1) ???

    merci

  10. #10
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    AdiGuba: reste calme ;-)

    xduris: un forum comme celui de développez n'empêche pas les gens de lire/apprendre/comprendre. Pour l'utilisation des collections, je te conseille vivement le tutoriel de SUN.

    Sinon, puisque tu ne vas pas lire, voici de quoi t'aider un peu:
    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
    public class StringExample {
        /**
         * @param args
         */
        public static void main(String[] args) {
            List<String> maxime = new ArrayList<String>(Arrays.asList(new String[] {"to", "be", "or", "not", "to", "be", "that", "is", "the", "question"}));
     
            System.out.println("STD:" + maxime);
     
            Collections.sort(maxime, new Comparator<String>() {
                // Un comparateur sur la première lettre des mots
                // Avec ce comparateur une chaine est "plus grande" qu'une autre si sa première lettre est plus loin dans l'alphabet"
                public int compare(String s1, String s2) {
                    return s1.charAt(0) - s2.charAt(0);
                }
            });
            System.out.println("CMP1:" + maxime);
     
            Collections.sort(maxime, new Comparator<String>() {
                // Un comparateur sur la dernière lettre des mots
                // Avec ce comparateur une chaine est "plus grande" qu'une autre si sa dernière lettre est plus loin dans l'alphabet"
                public int compare(String s1, String s2) {
                    return s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1);
                }
            });
            System.out.println("CMP2:" + maxime);
        }
    }

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    J'ai résolu mon pb.

    Voilà la solution.

    j'ai créé une classe TrucDtoComparator
    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
    package dto;
     
    import java.util.Comparator;
     
    import com.inetpsa.voz.dto.TrucDto;
     
    /**
     * comparatorTruc
     * 
     */
    public class TrucDtoComparator implements Comparator<Object> {
     
        /**
         * compare
         * 
         * @param o1
         *        o1
         * @param o2
         *        o2
         * @return int
         */
        public int compare(Object o1, Object o2) {
            TrucDto trucDto1 = (TrucDto) o1;
            TrucDto trucDto2 = (TrucDto) o2;
     
            if (trucDto1 != null && trucDto2 != null && trucDto1.getDate() != null
                    && trucDto2.getDate() != null) {
                return trucDto1.getDate().compareTo(trucDto2.getDate());
            } else if (trucDto1.getDate() != null) {
                return -1;
            } else {
                return 1;
            }
        }
     
    }
    Ensuite lorsque je souhaite trié ma collection je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Collections.sort(trucDtoList, new TrucDtoComparator());

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

Discussions similaires

  1. Trier une liste de dossiers et de fichiers
    Par steveleg dans le forum Langage
    Réponses: 2
    Dernier message: 07/04/2006, 16h54
  2. trier une list
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 23/03/2006, 12h01
  3. [ACCESS] - Requete issue d'une liste à selection multiple
    Par fredhali2000 dans le forum Access
    Réponses: 4
    Dernier message: 22/02/2006, 15h33
  4. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17
  5. [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