Java 8排序浮点值

Shy*_*dda 0 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
        }
    });
Run Code Online (Sandbox Code Playgroud)

这里t1.getExperience()将给你浮动结果.

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

请注意,与Float.compare包装compare方法的参数相比,传递给的参数的顺序相反,后者将按降序排序.


Ber*_*eri 6

您可以使用Comparator.comparing

 employeeList.sort(Comparator.comparing(Employee::getExperience).reversed());
Run Code Online (Sandbox Code Playgroud)

它会产生:

5.6 5.5 5.0 4.5 3.3

  • 更好地使用`Comparator.comparingDouble`.避免不必要的拳击. (3认同)