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 :

Treeset : objets ordonnés par date


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut Treeset : objets ordonnés par date
    Bonjour,

    J'ai un problème avec un treeset. J'ai implémenté un Comparator que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public int compare(TupleEntries oTuple1, TupleEntries oTuple2) {
     
          TupleEntries oTupleEntry1 = oTuple1;
          TupleEntries oTupleEntry2 = oTuple2;
     
            java.util.Date oDate1 = oTupleEntry1.getDate().getJavaDate();
            java.util.Date oDate2 = oTupleEntry2.getDate().getJavaDate();
     
            return oDate1.compareTo(oDate2);
      }
    J'ai 10 tuples à stocker, il ne me stocke que le premier. J'ai l'impression qu'il ne me stocke pas les autres parce que les dates sont identiqueS. Il est vrai que je lui demande de me trier ma collection par date....

    Du coup, je me demande comment gérer les dates identiques. J'ai cru voir sur le net qu'il fallait implémenter une méthode Equals. J'ai vu aussi qu'on pouvait si la comparaison sur la date ne permettait pas de différencier le plus récent, passer sur une deuxieme comparaison.
    Mais j'ai pas trouvé d'exemple concret et du coup, je suis un peu perdu ...

    Y aurait il une ame charitable pour m'expliquer quoi faire ? (c'est noel en plus, bientot ... )

    Merci d'avance

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


    Le choix des Set n'est peut-être pas adapté à ton cas !

    Les Set représentent une collection d'objet unique. Or si tu te base uniquement sur la date, il considèrera que la totalité de l'objet est identique et ne l'ajoutera pas...


    Tu as deux solutions :
    • Modifier ton Comparator, afin de comparer tous les champs utiles dans le cas où la date est égal
    • Utiliser une List à la place, que tu trieras lorsque tu en as besoin avec Collections.sort()


    a++

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Vu comme ca, il est possible que je me sois planté de collection .... Mais meme en utilisant une list, le collection.sort() se sert d'un comparator, et je vais avoir le meme probleme avec mes dates identiques ...
    Tu parles de modifier mon comparator pour gérer les cas ou mes dates sont identiques, mais en fait, je suis un peu paumé, je vois pas comment faire. ...


  4. #4
    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
    Citation Envoyé par michaelbob
    Vu comme ca, il est possible que je me sois planté de collection .... Mais meme en utilisant une list, le collection.sort() se sert d'un comparator, et je vais avoir le meme probleme avec mes dates identiques ...
    Non car la méthode sort se contente de trier les éléments, et si deux éléments sont "égaux" selon le comparateur, ils resteront quand même dans la liste (mais leur ordre ne sera pas forcément fixe).

    Citation Envoyé par michaelbob
    Tu parles de modifier mon comparator pour gérer les cas ou mes dates sont identiques, mais en fait, je suis un peu paumé, je vois pas comment faire. ...
    Pour les Set, si tu retourne 0 il considèrera les objets comme identique et ne les ajoutera pas. Donc si la méthode compareTo() sur tes Date renvoit 0, tu dois comparer d'autres attributs afin de retourner -1 ou 1 même lorsque les dates sont identique...

    a++

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ah ouais ok ... C'était tout con, en fait ...

    Bon ben merci pour ce petit eclaircissement !!!!

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

Discussions similaires

  1. [MySQL] Ordonner par date et heure sur 2 tables
    Par rems033 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 10/02/2009, 14h39
  2. Réponses: 4
    Dernier message: 05/10/2008, 02h41
  3. Réponses: 2
    Dernier message: 27/02/2008, 17h22
  4. Pb pour Ordonner par date
    Par Nadaa dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/08/2007, 11h52
  5. ordonner une filelistbox par date
    Par zgag06 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/08/2006, 20h03

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