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 :

Algo - Trier un tableau d'objets selon 2 critères


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut Algo - Trier un tableau d'objets selon 2 critères
    Bonjour à tous,

    Je galère un peu sur un souci d'algorithmique.

    Voici mon problème :
    Je dispose d'un tableau d'objets de type TrancheHoraire. Chaque tranche horaire a une heure de début et une nature. Les 3 natures possibles sont AT, FROM et FROMTO.

    J'ai donc en entrée mon tableau de TrancheHoraire avec mes tranches horaires non triées et rangées de façon aléatoire dans mon tableau. je voudrais avoir en sortie un tableau de Tranches horaires trié selon l'heure de début des tranches horaires (ordre chronologique) ET lorsque des tranches horaires ont des mêmes heures de début, je voudrais trier celles-ci selon leur type en respectant l'ordre suivant : AT puis FROM puis FROMTO.

    Merci pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    En gros :
    1) ta classe TrancheHoraire doit implémenter l'interface comparable
    2) tu surcharges la méthode compareTo (voir doc) de façon à définir comment un objet trancheHoraire1 vient avant (-1), après (1) ou est égal (0) à un autre objet trancheHoraire2 :
    en supposant que début1, type1 vienne de trancheHoraire1
    et que début2, type2 vienne de trancheHoraire2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si début1 < début2 alors -1
    si début1 == début2 alors si type1 < type2 alors -1
    etc .
    3) tu utilises la méthode sort de la classe Collection pour classer ton tableau (un ArrayList)

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Eventuellement, tu peut implémenter l'interface comparable sur ta classe TrancheHoraire. Tu définis la méthode CompareTo() selon tes régles et de cette façon tu pourras mettre des objets dans une liste triable et la méthode sort() de cette liste de sortira ta liste triée.

    edit : grillé :O

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Tu n'as pas donné le détail de ta classe TrancheHoraire, mais j'ai assumé que "dateDebut" était de type Date ou Calendar, et que "type" était de type String.

    Une solution possible est le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            TrancheHoraire[] tranchesHoraires;
            Arrays.sort(tranchesHoraires, new Comparator<TrancheHoraire>()
            {
                public int compare(TrancheHoraire tranche1, TrancheHoraire tranche2)
                {
                    int compareDateDebut = tranche1.getDateDebut().compareTo();
                    if(compareDateDebut != 0){
                        return compareDateDebut;
                    } else{
                        return tranche1.getType().compareTo(tranche2.getType());
                    }  
                }
            });
    J'ai utilisé une classe anonyme dans l'exemple, mais tu peux extraire une classe concrète si tu as besoin. La méthode compareTo renvoie 0 si des objets sont égaux (l'appelant et celui passé en paramètre), +1 si l'objet qui appel compareTo est plus grand que celui passé en paramètre, -1 si l'objet qui appel compareTo est plus petit que celui passé en paramètre. On commence donc par comparer les "dateDebut", et si les "dateDebut" de deux objets sont égaux alors on compare leur "type".

    Romain.

Discussions similaires

  1. Réponses: 35
    Dernier message: 28/10/2008, 10h11
  2. [Tableaux] Trier un tableau d'objets
    Par mnem0 dans le forum Langage
    Réponses: 4
    Dernier message: 21/06/2007, 15h08
  3. [Tableaux] Trier un tableau d'objet
    Par boux2 dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2007, 09h12
  4. Réponses: 5
    Dernier message: 13/06/2006, 11h08
  5. [algo]trier un tableau
    Par vietfun69 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/02/2006, 11h26

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