这个怎么样:
public class ChangeComparator implements Comparator<Quote>
{
public int compare(Quote o1, Quote o2) {
Float change1 = Float.valueOf(o1.getChange());
Float change2 = Float.valueOf(o2.getChange());
return change1.compareTo(change2);
}
}
请注意,Java 1.4 引入了Float#compare(float, float) https://docs.oracle.com/javase/8/docs/api/java/lang/Float.html#compare-float-float-(以及等效于Double
),几乎可以直接使用:
public class ChangeComparator implements Comparator<Quote>
{
public int compare(Quote o1, Quote o2) {
return Float.compare(o1.getChange(), o2.getChange());
}
}
(编辑后,我注意到@BorislavGizdov 已经在他的回答中提到了这一点。)
另外值得注意的是 Java 8Comparator#comparing(...) https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparing-java.util.function.Function- and Comparator#comparingDouble(...) https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparingDouble-java.util.function.ToDoubleFunction-提供了一种直接构建这些比较器的简单方法。
Comparator<Quote> changeComparator = Comparator.comparing(Quote::getChange);
将使用盒装进行比较Float
values.
Comparator<Quote> changeComparator = Comparator.comparingDouble(Quote::getChange);
将比较使用float
价值观提升为double
values.
鉴于没有Comparator#comparingFloat(...)
,我的偏好是使用comparingDouble(...)
方法,因为这仅涉及原始类型转换,而不涉及装箱。