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 :

Trie d'une liste d'array


Sujet :

Collection et Stream Java

  1. #1
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut Trie d'une liste d'array
    bonjour tout le monde

    je reçois en parametre de ma methode une liste d'array de string
    je voudrais trier cette liste en fonction du premier champ de chaque array

    ma liste reçue en parametre est listeAnosAlls
    voici comment je recupere chaque Array:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int j=0; j< listeAnosAlls.size(); j++)
    {
    String[] dataAnos = (String[])listeAnosAlls.get(j);
    }
    mais apres j'ai pas trop d'idée sur l'algo ou sur une methode a employé
    si parfois vous auriez des idées ...je suis preneur

    merci

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,
    Tu peux définir ton propre Comparator pour comparer deux arrays de String,
    puis t'en servir pour appeler Collections.sort(listeAnosAll, monComparateur)

  3. #3
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    merci de t'etre pencher sur mon probleme

    donc si j'ai bien compris ma classe implemente la classe Comparator
    puis j'implemente la methode compare
    si c'est ça comment est ce que je peux comparer deux string
    j'ai pas tres bien saisi ce qu'il y a ecrit dans la FAQ

    j'aurai tendance à faire ceci :

    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
     
     
    int compare(String[] array1,String[] array2){
     
      int resultat = 0;
      if (array1[0] > array2[0]){
    	resultat = -1;
      }
      else {
    	if (array1[0] < array2[0]){
    		resultat = 1;
    	}
      else{
    	resultat = 0;
       }
    return resultat;
    }
    mais je sais parfaitement que array1[0] > array2[0] n'est pas une instruction correcte

  4. #4
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    j'ai trouvé la methode compareTo pour comparer des String
    ok pas de probleme mais je n'arrive pas à mettre en place ma solution

    je creer une classe ListeComparator

    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
     
    package com.ecare.indigo.tools;
     
    import java.util.Comparator;
     
    public class ListeComparator implements Comparator {
     
    	public int compare(Object arg0, Object arg1) {
     
    		return 0;
    	}
     
    	public	int compare(String[] array1,String[] array2){
    		int resultat = 0;
    		if (array1[0].compareTo(array2[0]) < 0){
    			resultat = -1;
    		}
    		else {
    			if (array1[0].compareTo(array2[0]) > 0){
    				resultat = 1;
    			}
    		else{
    			resultat = 0;
    		}
     
    	}
    		return resultat;
    	}
     
    }
    dans ma classe qui en a besoin je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    maMethode(List listeAnosAll){
     
      ListeComparator listeComparator = new ListeComparator();
    ..  
    Collections.sort(listeAnosAlls,listeComparator);
     
    ...
    //puis j'exploite ma nouvelle listeAnosAll
     
     
    }
    mais visiblement ça n'a pas l'air de fonctionner
    je fais qq chose de travers : je ne sais pas comment exploiter ma methode implementée dans la classe listeComparator

  5. #5
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    personne n'a d'idée ou bien c'est trop stupide comme problem pour s'y pencher

  6. #6
    Membre du Club Avatar de lebesnec
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    apparemment tu utilise la bonne technique. Quel problème a tu exactement ??

    Quand à la méthode compare(...) implémentée dans ton Comparator, elle est en fait appellée par la méthode Collections.sort(...).

  7. #7
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Salut,

    Je ne comprends pas trop pourquoi tu passes par un tableau si tu as une liste en entrée.
    Essaie plutôt comme ça (aux erreurs de frappe près) :

    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
     
    package com.ecare.indigo.tools;
     
    import java.util.Comparator;
     
    public class ListeComparator implements Comparator {
      public int compare(Object o1, Object o2) {
        if (o1 == null || o2 == null)
          return 0;
     
        String tab1 = (String) o1;
        String tab2 = (String) o2;
        return tab1.compareTo(tab2);
      }
    }
    Et pour trier ta Collection listeAnosAlls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    // Tri de la Collection
    Collections.sort(listeAnosAlls , new ListeComparator ());
    // Affichage des éléments de la Collection pour voir si elle est triée
    Iterator it = listeAnosAlls.iterator();
    while (it.hasNext())
      System.out.println(it.next());

  8. #8
    Membre du Club Avatar de lebesnec
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    hum oui en fait dans la méthode compare(...) est ce qu'il ne faudrait pas que les paramètres soit des Object, et ensuite les caster ???

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par lebesnec
    hum oui en fait dans la méthode compare(...) est ce qu'il ne faudrait pas que les paramètres soit des Object, et ensuite les caster ???
    Oui, tout à fait !

  10. #10
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Salut

    en fait j'ai essayé ta solution (NGY) mais j'ai le message suivant

    java.lang.ClassCastException: [Ljava.lang.String;
    com.ecare.indigo.tools.ListeComparator.compare(ListeComparator.java:30)


    en fait listeAnosAlls est une liste d'array de String et le critere de comparaison est le prmeier champ de chaque array

    c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int j = 0;j< listeAnosAlls.size();j++){
    String[]  data = listeAnosAll.get(j)
    //et je dois comparer les data[0] pour trier ma listeAnosAlls  
    }

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Dans ta première version de ListeComparator , tu dois implémenter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int compare(Object arg0, Object arg1)
    car c'est cette méthode qui sera appelée par Collections.sort(...).

    Pour cela, tu dois d'abord caster arg0 et arg1 en tableaux de string puis utiliser le code que tu as déjà fait.

  12. #12
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    oui mais quand est ce que dois les caster(o1 et o2) ...c'est ça que je ne vois pas

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    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
     public int compare(Object arg0, Object arg1) { 
     
    String[] array1 = (String[]) arg0;
    String[] array2 = (String[]) arg1;
     
    //copier-coller de ton code
    int resultat = 0;
          if (array1[0].compareTo(array2[0]) < 0){
             resultat = -1;
          }
          else {
             if (array1[0].compareTo(array2[0]) > 0){
                resultat = 1;
             }
          else{
             resultat = 0;
          }
     
       }
          return resultat;
       } 
    }

  14. #14
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    ok j'avais pas tout saisi

    merci je vais essayé ton code

  15. #15
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    mille merci "Zorro"
    t'as encore "sauvé une vie"


    plsu serieusement merci encore
    j'obtiens le resultat escompté

    bonne journée ...

  16. #16
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Pourquoi faire simple quand on peut faire compliqué !
    Je ne vois pas l'intérêt des if dans le compare() !

    Je n'avais pas compris que la liste contenait des tableaux. Le code que je t'ai donné nécessite juste qques petites modifs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class ListeComparator implements Comparator {
      public int compare(Object o1, Object o2) {
        if (o1 == null || o2 == null)
          return 0;
     
        String[] tab1 = (String[]) o1;
        String[] tab2 = (String[]) o2;
        return tab1[0].compareTo(tab2[0]);
      }
    }
    Pour s'en convaincre, il suffit de lire la javadoc sur compareTo() de la classe String

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

Discussions similaires

  1. Créé un menu html à partir d'une list ou array
    Par Clebit dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/04/2010, 22h55
  2. [débutant] transformer une List en array
    Par pingoui dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/01/2009, 10h48
  3. Trie d'une liste au chargement
    Par lionel84 dans le forum Hibernate
    Réponses: 0
    Dernier message: 19/11/2008, 11h31
  4. Trie d'une liste selon un critère
    Par Albenejean dans le forum C++
    Réponses: 5
    Dernier message: 13/07/2007, 18h07
  5. [langage] Parcourir une list de array
    Par nledez dans le forum Langage
    Réponses: 4
    Dernier message: 08/11/2004, 17h11

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