如何根据对象的一个​​变量对对象列表进行排序

cod*_*441 5 java sorting collections list

我需要对最佳评价最差的电影(最好的5个 - 最差的1个)进行排序.我正在使用Collections.sort(),但列表出来的相同.我究竟做错了什么

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));
Collections.sort(films, new Comparator<Film>() {
    @Override
    public int compare(Film o1, Film o2) {
        final double film1 = o1.getRating();
        final double film2 = o2.getRating();
        return film1 > film2? 1
                : film1 < film2? -1 : 0;
    }
});
Run Code Online (Sandbox Code Playgroud)

Bor*_*der 5

使用该Double.compare方法工作正常:

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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

[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]
Run Code Online (Sandbox Code Playgroud)

Film我使用:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我建议使用Double.compare而不是你的版本,甚至o1.getRating - o2.getRating.

这或者你的Film实现是错误的 - 也许你的例子中的setter没有设置任何东西?