我有一份员工名单,其中有不同的经历,如
5.0,3.3,5.5,5.6,4.5等。
当我尝试使用Math.round
排序最大到最小体验时,它会给出错误的结果,如:
5.6,5.0,5.5,5.3,4.5等..
我想要的结果如下:
5.6,5.5,5.3,5.0,4.5等。
我在这里使用了Collections.sort
:
Collections.sort(employeeList, new Comparator<Emp>() {
@Override
public int compare(Emp t, Emp t1) {
return Math.round(t.getExperience() - t1.getExperience()); // which giving wrong results
// return Float.compare(t.getExperience() - t1.getExperience()); // which is not working
}
});
此处t1.getExperience()
将为您提供浮动结果。
答案 0 :(得分:9)
Math.round(t.getExperience() - t1.getExperience())
没有比较这两个数字,所以我不知道你期望实现的目标。
你应该使用:
Collections.sort(employeeList, new Comparator<Emp>() {
@Override
public int compare(Emp t, Emp t1) {
return Float.compare(t1.getExperience(), t.getExperience());
}
});
请注意,传递给Float.compare
的参数与包装compare
方法的参数相反,后者将按降序顺序生成排序。
答案 1 :(得分:6)
您可以使用Comparator.comparing
employeeList.sort(Comparator.comparing(Employee::getExperience).reversed());
它会产生:
5.6 5.5 5 4.5 3.3