Using the Double.compare method Double.compare fine:
public static void main(String[] args) throws IOException, ClassNotFoundException { final List<Film> films = new ArrayList<>(); films.add(new Film().setRating(1)); films.add(new Film().setRating(2.5)); films.add(new Film().setRating(3.5)); films.add(new Film().setRating(4)); films.add(new Film().setRating(5)); films.add(new Film().setRating(1)); films.add(new Film().setRating(2)); films.add(new Film().setRating(3)); films.add(new Film().setRating(4)); System.out.println(films); Collections.sort(films, new Comparator<Film>() { @Override public int compare(Film o1, Film o2) { return Double.compare(o1.getRating(), o2.getRating()); } }); System.out.println(films); }
Output:
[1.0, 2.5, 3.5, 4.0, 5.0, 1.0, 2.0, 3.0, 4.0] [1.0, 1.0, 2.0, 2.5, 3.0, 3.5, 4.0, 4.0, 5.0]
Film I used:
private static final class Film { double rating; public double getRating() { return rating; } public Film setRating(double rating) { this.rating = rating; return this; } @Override public String toString() { return Double.toString(rating); } }
I would suggest using Double.compare instead of your version or even o1.getRating - o2.getRating .
Is it either an implementation or your Film implementation is incorrect - maybe the installer in your example doesnβt install anything?
source share