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 :

Collections.sort ne fonctionne pas


Sujet :

Collection et Stream Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut Collections.sort ne fonctionne pas
    Salut a tous,

    Je recherche un moyen pour trier une arraylist<string>
    Dans la faq il est indiqué que l'on peut utiliser java.util.Collections.sort(ma_liste);

    Mais ceci ne marche pas chez moi...

    regardez plutot voici la liste que me ressort le "triage" :


    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
    2paleplan©©©©©©©zaza©E:/Docs/pazaz/pazaz sup/zeae/©©©©0©©©
    3pale plan©©©©©©©zaza©E:/Docs/pazaz/pazaz sup/zeae/©©©©0©©©
    3pale©©©©©©©zaza©E:/Docs/pazaz/pazaz sup/zeae/©©©©0©©©
    Intxxccv 110 061©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©0©©©
    Intxxccv 110 062©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©0©©©
    Intxxccv 110 063©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©29©©©
    Intxxccv 110 064©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©0©©©
    Intxxccv 110 065©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©15©©©
    Intxxccv 110 066©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©14©©©
    Intxxccv 110 067©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©0©©©
    Intxxccv 110 068©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©17©©©
    Intxxccv 110 069©©©©©©©zaza©E:/coolpintxxccv/Biume/©©©©25©©©
    JavaDay3-3©©©©©©©zaza©E:/Programmation/java/©©©©47©©©
    JavaDay5-3©©©©©©©zaza©E:/Programmation/java/©©©©114©©©
    Les Inconnus - Biouman (générique)©©©©©©©mpg©E:/Ma musique/chansons humouristiques/Parodies/©©©©0©©©
    aligngrid©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccdata/©©©©0©©©
    asmrebuild©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccdata/©©©©0©©©
    bidule©©©©©©©zaza©E:/Docs/pazaz/pazaz spe - Crash test/©©©©13©©©
    filecopy©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccdata/©©©©0©©©
    interpolationOpaciteGraph©©©©©©©zaza©E:/Programmation/flash/©©©©12©©©
    interpolationOpacite©©©©©©©zaza©E:/Programmation/flash/©©©©13©©©
    meshprogress©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccCOSMOSXpress/©©©©0©©©
    mov00228©©©©©©©mpg©E:/coolpirlande/Ring of Kerry-Alexis_27 10 06/©©©©0©©©
    projetsi©©©©©©©zaza©E:/Docs/Projet SI/ancien/©©©©0©©©
    rebuild©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccdata/©©©©0©©©
    seledgeandend©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccdata/©©©©0©©©
    session3_3©©©©©©©zaza©E:/Programmation/java/©©©©213©©©
    solverprogress©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccCOSMOSXpress/©©©©0©©©
    swfileopen©©©©©©©zaza©E:/Programmes/soyzerrtt03/program files/SolidWsdccdata/©©©©0©©©
    Belle liste hein !

    Mais comme vous pouvez le voir elle n'est pas triée...

    Pourquoi ? Et comment faire pour trier une telle liste ?

    PS : voici 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
     
                    BufferedWriter out = new BufferedWriter(new FileWriter(System.getProperty("user.dir")+ File.separator + "myfile.txt"));
                    int i=0;
                    int fin=db.size();
     
                    java.util.Collections.sort(db);
     
                    while(i<fin)
                    {
                        out.write(db.get(i));
                        out.newLine();
                        i++;
                    }
     
                    out.close();
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par lex13
    Mais comme vous pouvez le voir elle n'est pas triée...
    Bah... si! Ton code a fonctionné... et ta liste est triée selon l'ordre naturel sur les chaînes de caractères (ordre lexicographique):

    - d'abord les chiffres (de 0 à 9)
    - ensuite les majuscules (de A à Z)
    - ensuite les minuscules (de a à z)

    Maintenant si tu veux trier selon un ordre différent, il va falloir que tu l'expliques à java avec les méthodes qui vont bien

  3. #3
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par CyberChouan
    Bah... si! Ton code a fonctionné... et ta liste est triée selon l'ordre naturel sur les chaînes de caractères (ordre lexicographique):

    - d'abord les chiffres (de 0 à 9)
    - ensuite les majuscules (de A à Z)
    - ensuite les minuscules (de a à z)

    Maintenant si tu veux trier selon un ordre différent, il va falloir que tu l'expliques à java avec les méthodes qui vont bien
    Ah oui ! j'avais pas remarqué ça ! Merci

    Bin il faudrait juste que le trie ne tienne pas en compte la case : c'est a dire que yaurai d'abord les chiffres puis ensuire les lettres de a à z sans qu'il fasse de distinction entre minuscule et majuscule.

    C'est quoi la métgode qui va bien ?

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Il est possible fournir un Comparator personnalisé à la méthode Collections.sort() .

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Sans oublier la classe Collator qui permet d'effectuer des comparaisons de chaine selon les spécificité d'une locale...

    Comment comparer des chaînes de caractères selon la Locale ?

    a++

  6. #6
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    J'ai pas cherché à comprendre le truc des locale, mais j'ais trouvé une solution qui marche avec les comparator

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    java.util.Collections.sort(db, new Comparator<String>() {
                                     public int compare(String s1, String s2) {
                                          return s1.compareToIgnoreCase(s2);
                                     }});
    Merci à tous. Résolu !

  7. #7
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(list, Collator.getInstance(Locale.FRANCE));
    C'est un peu plus couteux qu'une comparaison "ignore-case" mais cela gère les accents et d'autres spécificité locale

    Exemple avec la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	List<String> list = new ArrayList<String>();
     
    	list.add("e");
    	list.add("ê");
    	list.add("ë");
    	list.add("é");
    	list.add("è");
    	list.add("a");
    	list.add("â");
    	list.add("Â");
    Une comparaison en "ignore-case", cela donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [a, e, â, Â, è, é, ê, ë]
    (les lettres normales sont toutes avant les lettres accentués)

    Avec un Collator FRANCE, cela donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [a, â, Â, e, é, è, ê, ë]

    a++

  8. #8
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    merci

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

Discussions similaires

  1. Quick Sort ne fonctionne pas
    Par thierryler dans le forum Collection et Stream
    Réponses: 42
    Dernier message: 31/07/2014, 14h38
  2. Fonctionr sort() ne fonctionne pas ?
    Par EricStib dans le forum Général Python
    Réponses: 14
    Dernier message: 13/01/2009, 17h26
  3. "foreach" fonctionne pas si collection nulle ?
    Par lr dans le forum Langage
    Réponses: 3
    Dernier message: 18/12/2008, 12h28
  4. un For Each qui ne fonctionne pas avec une collection maison !
    Par grenouillesiverte dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/09/2007, 21h00

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