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

Langage Java Discussion :

Trier une liste en comparant des doubles


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut Trier une liste en comparant des doubles
    Bonjour,

    Je souhaite trier une liste en créant un comparator portant sur des doubles.

    Avec des int je procède comme suit :

    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
     
    Collections.sort(
       (List) maListe,
       new Comparator() {
    	public int compare(Object o1, Object o2) {
    	    Produit p1 = (Produit) o1;
    	    Produit p2 = (Produit) o2;
    	    int i1 = 
    	        p1.getPrix() != null
    	        ? p1.getPrix().intValue()
    	        : 0;
    	     int i2 =
    	        p2.getPrix() != null
    	        ? p2.getPrix().intValue()
    	        : 0;
    	     return i1 - i2;
    	}
       });
    Mais aujourd'hui mes prix sont des double ... Comment faire alors ?
    Pour information, j'ai besoin de travailler sur 2 décimales, je peux donc éventuellement convertir mon prix.

    D'avance merci.

    Flo

  2. #2
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Salut,

    Je comprend mal ta question. Pourquoi ne peux tu pas simplement remplacer tes int par des double?

    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
     
    Collections.sort(
                       (List) maListe,
                       new Comparator() {
                        public double compare(Object o1, Object o2) {
                            Produit p1 = (Produit) o1;
                            Produit p2 = (Produit) o2;
                            double i1 = 
                                p1.getPrix() != null
                                ? p1.getPrix().doubleValue()
                                : 0;
                             double i2 =
                                p2.getPrix() != null
                                ? p2.getPrix().doubleValue()
                                : 0;
                             return i1 - i2;
                        }
                       });
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    Car il arrondi et du coup mon tri est moyen :

    Dans les logs, si j'affiche mes valeurs, j'ai :

    p1.getPrix()=4.936708860759493
    p2.getPrix()=15.822784810126583
    i2 - i1=15 - 4= 11


    Du coup voici ma liste triée par prix, le problème est en gras :

    15.822784810126583
    13.670886075949367
    9.620253164556962
    7.341772151898734
    6.329113924050633
    6.962025316455696

    5.443037974683544
    4.936708860759493
    4.6835443037974684
    4.430379746835443
    3.9240506329113924
    3.5443037974683547
    2.0253164556962027

  4. #4
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Mais dans ta classe Produit, le prix est bien en double? Car si c'est le cas je ne comprend pas pourquoi il arrondi...

    Vérifie bien que tout est passé en double...

    J'espère t'aider

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    Merci bcp ploxien.

    Oui le prix est bien en double dans la classe Produit.
    Quand je mets tout le comparator en double comme tu le suggérais j'ai l'errreur suivante :

    Le type de retour n'est pas compatible avec Comparator.compare(Object, Object)

    Dans le doute j'ai mis mais c'est pareil ..

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    On pourrait avoir le code de ta méthode compare() avec les double ?

    a++

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

Discussions similaires

  1. Trier une List contenant des noms et prénoms
    Par Jb_One73 dans le forum Général Java
    Réponses: 15
    Dernier message: 19/02/2015, 15h19
  2. Réponses: 1
    Dernier message: 23/03/2013, 13h26
  3. Trier une liste d'objets d'après un champ des objets
    Par gids01 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 02/07/2007, 09h52
  4. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17
  5. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44

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