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

Java Discussion :

Tri successif avec Comparator


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Points : 83
    Points
    83
    Par défaut Tri successif avec Comparator
    Qu'est ce qu'un comparator?

    Ensuite je planche surune fonction chargé d'ajouté ce meme comparateur à la fin d'une liste.
    Mais je ne sais pas ce que c'est ni comment il fonctionne ?

    La fonction est de la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	public void addComparator(Comparator<T> comparator) {
    	}
    Pouvez vous m'éclairer?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Salut, le mieux c'est de lire les tutoriels!

    Par exemple celui ci : http://fmora.developpez.com/tutoriel...aire/#L5.2.1.2

    Ou faire une recherche dans le forum : http://www.developpez.net/forums/d83...le-comparator/


    Le comparator, comme son nom l'indique, sert à comparer les élements d'une liste en vue de les trier.

    Mais je ne vois pas l'intérêt de l'ajouter à ta liste...

    A moins d'avoir une liste de Comparator?

    Mais si tu as une liste, mettons de String, cela n'a aucun sens de rajouter le Comparator à cette liste.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Carhiboux Voir le message
    Salut, le mieux c'est de lire les tutoriels!

    Par exemple celui ci : http://fmora.developpez.com/tutoriel...aire/#L5.2.1.2

    Ou faire une recherche dans le forum : http://www.developpez.net/forums/d83...le-comparator/


    Le comparator, comme son nom l'indique, sert à comparer les élements d'une liste en vue de les trier.

    Mais je ne vois pas l'intérêt de l'ajouter à ta liste...

    A moins d'avoir une liste de Comparator?

    Mais si tu as une liste, mettons de String, cela n'a aucun sens de rajouter le Comparator à cette liste.

    Mais lorsque j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void addComparator(Comparator<T> comparator) {
    	}
    est ce bien une liste avec l'expression de Comparator<T> ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Citation Envoyé par adissa357 Voir le message
    Mais lorsque j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void addComparator(Comparator<T> comparator) {
    	}
    est ce bien une liste avec l'expression de Comparator<T> ?
    Lorsque tu écris cela, tu déclares juste une méthode qui se nomme addComparator, qui ne renvoie rien (void) et qui prends en paramètre un objet de type Comparator<T>.

    Peut être que l'implémentation de la méthode manipule des listes. Mais je ne peux pas le deviner.

    Et puis c'est quoi "l'expression de Comparator<T>" ?

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Points : 83
    Points
    83
    Par défaut
    Oui elle est censée manipulé une liste.

    Au fait je souhaite écris une fonction chargé d'ajouter comparator à la fin d'une liste.

    J'ai bien essayé d'utilisé addLast mais cela ne fonctionne.

    Pour plus de clarté voilà à quoi ressemble ma classe contenant les propriétes à implémenter.

    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
    public class SortChain<T> implements ISortChain<T> {
    	/**
             * <p>add the given comparator at the end of the list.</p>
             * @param comparator
             */
    	public void addComparator(Comparator<T> comparator) {
     
     
    		//T.addLast(comparator);
    	}
    	/**
             * <p>add the given comparator at the position. position is an index and start at 0</p>
             * @param position
             * @param comparator
             */
    	public void addComparator(int position, Comparator<T> comparator) {
    	}
    }
    Des idées?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    On n'ajoute pas un comparator en début, milieu, fin de liste.

    On ajoute un élément à une liste, et on utilise un comparator pour comparer les éléments de la liste. Ce que tu demande n'a pas de sens. Ca sert à quoi, selon toi, d'ajouter un Comparator en début/milieu/fin de liste? C'est censé faire quoi.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    En l'occurrence la classe SortChain qu'il donne en précisions supplémentaires, répond plutôt bien à ces questions.
    Il cherche à implémenter un genre de composition de Comparators.

    ... Et ne comprend visiblement pas que la liste, c'est à lui de la créer et de la gérer pour réaliser l'implémentation.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Houla, ben si le but est de faire un comparateur qui est une aggrégation de comparateurs, ce n'est pasla bonne méthode. Déjà faudrait que ça implémente aussi Comparator. Ensuite suffit derrière d'utiliser un List<T> et de la parcourir dans la fonction compare.


    Mais désolé, le code ne laisse pas penser à ça. Pour moi c'est un début de code pour une liste chainée triée, et il sait pas comment y gérer le comparateur.


    Comme quoi, sans précision, on va pas savoir aider....

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Points : 83
    Points
    83
    Par défaut az a a
    Citation Envoyé par tchize_ Voir le message
    Houla, ben si le but est de faire un comparateur qui est une aggrégation de comparateurs, ce n'est pasla bonne méthode. Déjà faudrait que ça implémente aussi Comparator. Ensuite suffit derrière d'utiliser un List<T> et de la parcourir dans la fonction compare.


    Mais désolé, le code ne laisse pas penser à ça. Pour moi c'est un début de code pour une liste chainée triée, et il sait pas comment y gérer le comparateur.


    Comme quoi, sans précision, on va pas savoir aider....
    EN effet T'as raison. Je serais amené à traiter une liste de chaine triée

    Voici le comportement attendu du comparateur
    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
    public static void main(String[] args) {
     
    		List<Person> persons = new ArrayList<Person>();
    		persons.add(new Person("Olivier", "Sar", new Date(98, 11, 12)));
    		persons.add(new Person("Etienne", "Pigeot", new Date(99, 11, 12)));
    		persons.add(new Person("Antoine", "Pigeot", new Date(99, 11, 12)));
    		persons.add(new Person("Wilfrid", "Zerk", new Date(99, 11, 12)));
    		persons.add(new Person("Henry", "Pigeot", new Date(99, 11, 12)));
    		persons.add(new Person("Laurent", "Pigeot", new Date(99, 11, 12)));
    		persons.add(new Person("Olivier", "Pigeot", new Date(95, 11, 12)));
    		persons.add(new Person("Stéphane", "Laurent", new Date(99, 11, 12)));
    		persons.add(new Person("Antoine", "Sar", new Date(97, 11, 12)));
    		persons.add(new Person("Antoine", "Bichon", new Date(97, 11, 12)));
    		persons.add(new Person("Antoine", "Renaud", new Date(97, 11, 12)));
     
    		SortChain<Person> sort1 = new SortChain<Person>();
    		sort1.addComparator(new PersonBirhdateComparator());
    		Collections.sort(persons, sort1);
    		System.out.println(persons);
     
    		sort1.addComparator(new PersonLastNameComparator());
    		Collections.sort(persons, sort1);
    		System.out.println(persons);
     
    		sort1.addComparator(new PersonFirstNameComparator());
    		Collections.sort(persons, sort1);
    		System.out.println(persons);
     
    	}
    Qui devrait donner
    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
    [Person [firstName=Olivier, lastName=Pigeot, birthDate=1995-12-12]
    , Person [firstName=Antoine, lastName=Sar, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Bichon, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Renaud, birthDate=1997-12-12]
    , Person [firstName=Olivier, lastName=Sar, birthDate=1998-12-12]
    , Person [firstName=Etienne, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Antoine, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Wilfrid, lastName=Zerk, birthDate=1999-12-12]
    , Person [firstName=Henry, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Laurent, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Stéphane, lastName=Laurent, birthDate=1999-12-12]
    ]
    [Person [firstName=Olivier, lastName=Pigeot, birthDate=1995-12-12]
    , Person [firstName=Antoine, lastName=Bichon, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Renaud, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Sar, birthDate=1997-12-12]
    , Person [firstName=Olivier, lastName=Sar, birthDate=1998-12-12]
    , Person [firstName=Stéphane, lastName=Laurent, birthDate=1999-12-12]
    , Person [firstName=Etienne, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Antoine, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Henry, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Laurent, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Wilfrid, lastName=Zerk, birthDate=1999-12-12]
    ]
    [Person [firstName=Olivier, lastName=Pigeot, birthDate=1995-12-12]
    , Person [firstName=Antoine, lastName=Bichon, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Renaud, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Sar, birthDate=1997-12-12]
    , Person [firstName=Olivier, lastName=Sar, birthDate=1998-12-12]
    , Person [firstName=Stéphane, lastName=Laurent, birthDate=1999-12-12]
    , Person [firstName=Antoine, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Etienne, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Henry, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Laurent, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Wilfrid, lastName=Zerk, birthDate=1999-12-12]
    ]
    Avez vous des idées pour m'éclairer dans la résolution de cette implémentation d'interface ?

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Points : 83
    Points
    83
    Par défaut a v c
    Citation Envoyé par tchize_ Voir le message
    Houla, ben si le but est de faire un comparateur qui est une aggrégation de comparateurs, ce n'est pasla bonne méthode. Déjà faudrait que ça implémente aussi Comparator. Ensuite suffit derrière d'utiliser un List<T> et de la parcourir dans la fonction compare.


    Mais désolé, le code ne laisse pas penser à ça. Pour moi c'est un début de code pour une liste chainée triée, et il sait pas comment y gérer le comparateur.


    Comme quoi, sans précision, on va pas savoir aider....
    EN effet T'as raison. Je serais amené à traiter une liste de chaine triée
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Person [firstName=Olivier, lastName=Pigeot, birthDate=1995-12-12]
    , Person [firstName=Antoine, lastName=Sar, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Bichon, birthDate=1997-12-12]
    , Person [firstName=Antoine, lastName=Renaud, birthDate=1997-12-12]
    , Person [firstName=Olivier, lastName=Sar, birthDate=1998-12-12]
    , Person [firstName=Etienne, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Antoine, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Wilfrid, lastName=Zerk, birthDate=1999-12-12]
    , Person [firstName=Henry, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Laurent, lastName=Pigeot, birthDate=1999-12-12]
    , Person [firstName=Stéphane, lastName=Laurent, birthDate=1999-12-12]
    ]
    Avez vous des idées pour m'éclairer dans la résolution de cette implémentation d'interface ?

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il te suffit de créer une classe SortChain<T>, implémentant Comparator<T> (et non pas ISortChain, c'est inutile a priori), dont la méthode compare est, en gros


    pour chaque comparator de ma liste
    appeler ce comparator
    si la valeur de retour est que les objets sont différents, retourner cette valeur
    sinon, passer au comparateur suivant

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Points : 83
    Points
    83
    Par défaut a a a
    Citation Envoyé par tchize_ Voir le message
    Il te suffit de créer une classe SortChain<T>, implémentant Comparator<T> (et non pas ISortChain, c'est inutile a priori), dont la méthode compare est, en gros


    pour chaque comparator de ma liste
    appeler ce comparator
    si la valeur de retour est que les objets sont différents, retourner cette valeur
    sinon, passer au comparateur suivant
    ISortChain et l'interface qui sera implémenté dans SortChain au fait . Donc loin d'etre inutile;

Discussions similaires

  1. Quel algorithme de tri est utilisé avec Comparator
    Par Ceubex dans le forum Général Java
    Réponses: 9
    Dernier message: 24/12/2011, 15h23
  2. [SQL] Tris successifs avec un limit
    Par LestoK dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/08/2007, 10h47
  3. tri dynamique avec XSLT
    Par JohnBlatt dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/09/2005, 12h30
  4. [LG]Tri alphabetique avec les pointeurs
    Par zbooon dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2005, 17h04
  5. tri obligatoire avec DISTINCT?
    Par Marseillais9 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 31/07/2003, 17h50

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