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 :

Retirer les doublons de dates


Sujet :

Collection et Stream Java

  1. #1
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut Retirer les doublons de dates
    Bonjour,

    Je récupère dans un SGBD des timestamp affichés ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    2007-10-22 06:42:26.046
    2007-10-22 06:41:05.421
    2007-10-19 06:46:10.421
    2007-10-19 06:44:19.968
    ...
    A l'utilisateur, je dois afficher seulement les dates (sans l'heure) et sans doublons comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    2007-10-22
    2007-10-19
    ...
    Comment retirer les doublons par date ?

    En fait, le fait d'avoir l'heure dans l'objet date créer un problème de test puisque tous les contenus sont différents même si la date est la même.


    Merci.
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour grouper ce genre de choses autant le faire au niveau du SGBD avec un GROUP BY bien senti
    genre sous oracle:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    select ma_date from ma_table where id=x group by to_char(ma_date,'DD/MM/YYYY')
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Ensuite pour l'élimination des doublons, tu utilises une méthode "equals" pour tester si 2 objets qui se suivent (puisque la requête de sinok te les donne triés) sont égaux
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut
    Citation Envoyé par sinok Voir le message
    Pour grouper ce genre de choses autant le faire au niveau du SGBD avec un GROUP BY bien senti
    genre sous oracle:
    Code SQL :


    SELECT ma_date FROM ma_table WHERE id=x GROUP BY to_char(ma_date,'DD/MM/YYYY')
    J'ai bien essayer mais cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Session session = HibernateUtil.getSession();
     
    Criteria criteria = session.createCriteria(BasePesee.class);
    criteria.setProjection(Projections.distinct(Projections
         .property(BasePesee.PROP_DATE_HEURE_P)));
            criteria.addOrder(Order.desc(BasePesee.PROP_DATE_HEURE_P));
    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  5. #5
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    Ensuite pour l'élimination des doublons, tu utilises une méthode "equals" pour tester si 2 objets qui se suivent (puisque la requête de sinok te les donne triés) sont égaux

    J'ai prévu cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    List liste = criteria.list();
    
    Set set = new HashSet<Date>() ;
    set.addAll(liste) ;
    liste = new ArrayList(set);
    Mais mon soucis est que date contient aussi l'heure et donc le retrait des doublons ne fonctionne pas puisse que toutes les date sont différentes (à cause de l'heure qui change tout le temps).

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Là c'est un ordre de tri que tu as placé sur ta query, par un regroupement.
    CF: http://www.hibernate.org/hib_docs/re...ria-projection
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut
    Citation Envoyé par sinok Voir le message
    Là c'est un ordre de tri que tu as placé sur ta query, par un regroupement.
    CF: http://www.hibernate.org/hib_docs/re...ria-projection

    C'est vrai, mais j'utilise aussi distinct.

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  8. #8
    Membre régulier Avatar de fisico
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 98
    Points : 92
    Points
    92
    Par défaut
    Une autre solution possible aurait été l'utilisation de l'interface Set.
    SCJP - SCWCD - SCBCD

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Oups pardon, normalement un group by en SQL çà fait l'affaire dans ce genre de cas...

    Au pire tu fais directement en HQL
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut
    Citation Envoyé par fisico Voir le message
    Une autre solution possible aurait été l'utilisation de l'interface Set.
    C'est ce que je fais : voir post ci-avant.
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  11. #11
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut
    Citation Envoyé par sinok Voir le message
    Oups pardon, normalement un group by en SQL çà fait l'affaire dans ce genre de cas...

    Au pire tu fais directement en HQL
    Il semble donc qu'une solution existe avec Hibernate ? Mais laquelle ?

    Je pense que cela doit pouvoir être fait aussi au niveau de java ? Mais comment ?


    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  12. #12
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 898
    Points
    1 898
    Par défaut
    Bon, j'ai tranformer les timestamp en date sous le forme de string comme cela il n'y a pas plus l'heure.

    Enfin j'enlève les doublons avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set set = new HashSet<Date>() ;
    set.addAll(liste) ;
    liste = new ArrayList(set);
    Il y a peut-être mieux mais cela fonctionne déjà bien comme cela.

    Merci.
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/06/2014, 13h22
  2. [MySQL] Retirer les doublons lors de l'affichage en php
    Par kakashi05 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/08/2011, 17h21
  3. [AC-97] Requête qui retire les doublons en fonctions de 3 clefs primaires.
    Par Jazz_ dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/10/2010, 10h26
  4. Retirer les doublons du résultat
    Par Mister Nono dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/10/2006, 12h47
  5. Enlever les doublons en fonction de la date
    Par nicko5959 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 14h13

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