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)
使用该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没有设置任何东西?