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 :

comparer des dates entre elles


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut comparer des dates entre elles
    bonjour,

    j'enregistre dans un fichier des événements mais pas toujours dans leur ordre d'arrivée pour des raisons précises.

    chaque ligne de mon fichier correspond à une date;

    je sais comment récupérer la date sous forme de String et la convertir en Date (vu dans la faq);

    par contre, je ne sais pas comment comparer deux dates entre elles?

    merci d'avance !

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Y a peut-être plus simple et plus propre mais tu peux convertir les dates en timestamp (récupère un Calendar puis fais un calendar.setTime(myDate) et calendar.getTimeInMillis()) et les comparer.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Ou tout simplement Date implémente Comparable<Date> donc tu peux utiliser compareTo

    Sinon :
    récupère un Calendar puis fais un calendar.setTime(myDate) et calendar.getTimeInMillis()
    A quoi bon passer par un Calendar ? getTime() directement sur la date...
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    mon pb justement est de comparer... suffit il de faire une simple comparaison classique comme date1<date2 ?

    le plus simple serait peut être de récupérer chaque ligne dans une collection
    du style Collection<Ligne> avec Ligne une classe que je créerai qui contiendrait une date et d'autres informations...
    dans ce cas y'a t'il moyen de récupérer les éléments de la collection dans l'ordre croissant des dates (plus rapidement qu'en comparant une à une chaque date)?

    merci pour vos réponses

  5. #5
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Comme je te l'ai écrit plus haut, il suffit d'utiliser compareTo...

    Si tu veux utiliser une Collection de ta propre classe et la trier :
    - soit ta classe implémente Comparable<TaClasse> (typiquement dans ton compareTo tu renvoies le compareTo des dates contenues dans ta classe) et tu peux utiliser Collections.sort(taListe)
    - soit tu fais Collections.sort(taListe,tonComparator), où tonComparator est un Comparator<TaClasse>
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par remika
    Comme je te l'ai écrit plus haut, il suffit d'utiliser compareTo...

    Si tu veux utiliser une Collection de ta propre classe et la trier :
    - soit ta classe implémente Comparable<TaClasse> (typiquement dans ton compareTo tu renvoies le compareTo des dates contenues dans ta classe) et tu peux utiliser Collections.sort(taListe)
    - soit tu fais Collections.sort(taListe,tonComparator), où tonComparator est un Comparator<TaClasse>
    ok ça se précise

    maListe serait de type List<Ligne>
    maClasse serait List<Ligne>

    sachant que Ligne est une classe dont les objects auront pour informations une date de type Date et d'autres données de type String ...

    merci de ton aide!

  7. #7
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    N'oublie pas le si ça a totalement répondu à ta question ...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par chtig
    N'oublie pas le si ça a totalement répondu à ta question ...

    j'attends confirmation de mon dernier poste

    promis j'oublierai pas le résolu ... !

  9. #9
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Ah ben oui ton dernier post était bon, et en plus ta classe Ligne peut implémenter Comparable c'est encore mieux

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par remika
    A quoi bon passer par un Calendar ? getTime() directement sur la date...
    Parce que trop simple !!! J'avais pas vu

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par chtig
    Ah ben oui ton dernier post était bon, et en plus ta classe Ligne peut implémenter Comparable c'est encore mieux
    donc pour classer dans l'ordre croissant des dates, je fais simplement :

    List<Ligne> listeLignes = new ArrayList<Ligne>;

    //on récupére les events ev grace à un listener
    Ligne ligne = new Ligne(ev.getDate, ev.getName);
    listeLigne.add(ligne);

    Comparator<Date> comp = new Comparator<Date>();
    Collections c = Collections.sort(listeLigne, comp);

    et je récupére un à un les éléments de la collection, déjà classés dans l'ordre croissant des dates ...

    est ce bien ça ?

  12. #12
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Non, pas exactement.
    - Si ta classe Ligne implémente Comparable et que tu veux trier ta Collection selon l'ordre naturel, nul besoin de Comparator. En fait en gros tu utilises un Comparator pour trier dans un ordre "non naturel" (tri selon la 2eme lettre d'une String par exemple)
    - Sinon, tu dois définir ton propre Comparator. Comparator est une interface donc tu dois faire ta propre classe qui "implements" Comparator<Ligne> (pas un Comparator<Date>, puisque ce sont des Ligne et non pas des Date que tu veux trier), et implémenter les méthodes compare et equals à ta façon.
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    - Sinon, tu dois définir ton propre Comparator. Comparator est une interface donc tu dois faire ta propre classe qui "implements" Comparator<Ligne> (pas un Comparator<Date>, puisque ce sont des Ligne et non pas des Date que tu veux trier), et implémenter les méthodes compare et equals à ta façon.
    je veux trier mes lignes (chaque ligne étant composée d'une date et d'autres données) et les obtenir dans l'ordre croissant des dates...

    où est l'information de comparaison de dates ? elle est implicite dans Comparator ?

    là où je suis un peu embrouillé aussi, est le mélange entre Liste et Collection ... ?

    y'aurait pas un exemple simple ?

  14. #14
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Bon a priori je dirais que ton ordre naturel est l'ordre chronologique.
    Donc tu fais dans ta classe Ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Ligne implements Comparable<Ligne>
    là tu dois redéfinir compareTo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public int compareTo(Ligne l) {
       // tu renvoies la comparaison des dates
       return this.laDateEnQuestion.compareTo(l.laDateEnQuestion);
    }
    Ensuite, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.sort(taListe);
    suffit à la trier ta liste (c'est la méthode compareTo que tu as redéfini qui va être utilisée pour faire le tri).

    Sinon List est une sous-interface de Collection, donc une List est une Collection.
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    merci beaucoup remika !

    je vais tester et je te tiens au courant;

    c'est tellement clair que je mets déjà résolu ...

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

Discussions similaires

  1. [Lazarus] MD5 : comment comparer des valeurs entre elles ?
    Par MedGIR dans le forum Lazarus
    Réponses: 1
    Dernier message: 26/08/2009, 21h30
  2. Réponses: 3
    Dernier message: 14/06/2009, 00h14
  3. Réponses: 4
    Dernier message: 31/10/2005, 12h06
  4. Comparer des Dates (Access, jdbc)
    Par babylone7 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/07/2005, 10h01
  5. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15

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