Java 8排序浮点值

时间:2018-04-12 07:14:49

标签: java sorting collections java-8

我有一份员工名单,其中有不同的经历,如

  

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()将为您提供浮动结果。

2 个答案:

答案 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