java - 使用 Comparators 帮助比较 float 成员变量

标签 java sorting arraylist comparator comparable

我能够很好地比较字符串,但想知道如何对 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/

相关文章:

java - 如何从字符串或输入流执行 jax-ws soap 请求

PHP/MySql 结合排序和分页

ruby-on-rails - 按对象属性对数组进行排序但使用 nil? Ruby 中的条件

java - java中将扩展抽象类的对象添加到抽象类类型的Arraylist中的方法

java - Jenkins 使用了错误的 Java 版本

java - 从 RecyclerView 中移除对象

java - android XML View 在Eclipse中不显示ToggleButton

java - 在带有 JDBC 驱动程序的 Java 中使用准备好的语句和变量绑定(bind) Order By

java - 传递 ArrayList 报告显示逗号每个项目

json - 如何在json对象中传递对象列表