我能够很好地比较字符串,但想知道如何对 float 进行排序?
getChange() 返回一个字符串。我希望能够降序排序。我该怎么做?
更新:
package org.stocktwits.helper;
import java.util.Comparator;
import org.stocktwits.model.Quote;
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());
if (change1 < change2) return -1;
if (change1 == change2) return 0; // Fails on NaN however, not sure what you want
if (change2 > change2) return 1;
}
}
我收到编译时错误:
This method must return a result of type int ChangeComparator.java
最佳答案
这个怎么样:
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)
(和 Double
中的等价物),几乎可以直接使用:
public class ChangeComparator implements Comparator<Quote>
{
public int compare(Quote o1, Quote o2) {
return Float.compare(o1.getChange(), o2.getChange());
}
}
(编辑后,我注意到@BorislavGizdov 已经在他的回答中提到了这一点。)
还值得注意的是 Java 8 Comparator#comparing(...)
和 Comparator#comparingDouble(...)
提供直接构建这些比较器的简单方法。
Comparator<Quote> changeComparator = Comparator.comparing(Quote::getChange);
将使用装箱的 Float
值进行比较。
Comparator<Quote> changeComparator = Comparator.comparingDouble(Quote::getChange);
将使用提升为 double
值的 float
值进行比较。
鉴于没有Comparator#comparingFloat(...)
,我倾向于使用comparingDouble(...)
方法,因为这只涉及原始类型转换,而不是装箱。
关于java - 使用 Comparators 帮助比较 float 成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3705275/