60 votes

Comparateur avec type double

J'ai écrit le code suivant :

 public class NewClass2 implements Comparator<Point>
{
    public int compare(Point p1, Point p2)
    {
        return (int)(p1.getY() - p2.getY());
    }
}

Si je disons avoir deux nombres doubles, 3.2 - 3.1 , la différence devrait être 0.1 . Cependant, lorsque je convertis le nombre en int, la différence se termine par 0 , ce qui n'est pas correct.

J'ai donc besoin de compare() pour renvoyer un double, pas un int. Le problème est que mon getX est un double. Comment puis-je résoudre ce problème?

76voto

dteoh Points 1931

Vous n'avez pas besoin de retourner double .

L' Comparator permet d'établir un ordre des éléments comparés. Le fait d'avoir des champs qui utilisent double n'est pas pertinent pour cet ordre.

Votre code est bon.

Désolé, je me suis trompé, en relisant la question, voici ce dont vous avez besoin :

 public class NewClass2 implements Comparator<Point> {
    public int compare(Point p1, Point p2) {
        if (p1.getY() < p2.getY()) return -1;
        if (p1.getY() > p2.getY()) return 1;
        return 0;
    }    
}

19voto

Jan Dolejsi Points 11

Depuis Java 1.8, vous pouvez également utiliser

 Comparator.comparingDouble(p -> p.getY())

6voto

Miguel Durazo Points 668

Je veux juste développer la réponse de Peter Lawrey sur JDK 8, si vous le faites comme ceci:

 public class NewClass2 implements Comparator<Point> {
    public int compare(Point p1, Point p2) {
        return Double.compare(p1.getY(), p2.gety());
    }    
}

Vous pouvez définir ce comparateur en utilisant une expression lambda assez facilement

 (Point p1,Point p2) -> Double.compare(p1.getY(), p2.gety())  

Mieux encore, vous pouvez utiliser une référence de membre comme celle-ci :

 Double::compare

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X