Java8排序浮点值
我有一份有不同经历的员工名单,比如 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,比如: 这里t1.getExperience将为您提供浮点结果。Math.roundt.getExperience-t1.getExperience不会比较这两个数字,因此我不知道您希望实现什么 您应该使用:Java8排序浮点值,java,sorting,collections,java-8,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,比如: 这里t1.getExperience将为您提供浮点结果。Math.roundt.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的参数与包装比较方法的参数顺序相反,包装比较方法将按降序进行排序。您可以使用
它将产生:
5.6
5.5
5
4.5
3.3
看到这个答案可能会有帮助。概要文件的比较器正在比较Emp1和Emp2类对象2。什么是经验属性类型还没有具体说明。当您比较员工时,它将如何作为一个比较器?java.lang.Float已经实现了Comparable,任何您想这样做的原因。而不是反向比较这两个值吗?Mth.R.T.GETMeave- T1. GET经验不起作用,因为它会考虑5.3和5相等,因为舍入。这个技巧只适用于整数。也许他想要Comparator.comparinge->Math.rounde.getExperience?@daniu发布的示例显示了规则的降序,所以看起来不像Math.round是必需的。当我在上面尝试时,它说比较浮点,浮点中的浮点不能应用于浮点@Eran@ShylendraMadda你没有试过上面的方法。了解一个参数和两个参数之间的差异。@ShylendraMadda-和,不是同一个参数使用Comparator.comparingDouble。避免不必要的拳击。
Collections.sort(employeeList, new Comparator<Emp>() {
@Override
public int compare(Emp t, Emp t1) {
return Float.compare(t1.getExperience(), t.getExperience());
}
});
employeeList.sort(Comparator.comparing(Employee::getExperience).reversed());