比较 ArrayList 中的浮点数

Compare float in ArrayList

我有这个:

Offers eoResponse = eoClient.getOffers(url);
Collections.sort(eoResponse, new Comparator<Offer>() {
  public int compare(Offer offer1, Offer offer2) {
    return offer1.getAmount().compareToIgnoreCase(offer2.getAmount()); // errors in this line cannot resolve method compareToIgnoreCase(float)
  }
});

我想根据价格对我的数组列表进行排序,但出现此错误:

 cannot resolve method compareToIgnoreCase(float)

怎么了

您应该使用此方法调用进行比较:offer1.getAmount().compareTo(offer2.getAmount());

您还应该使用 Float,而不是 float 作为 amount
的类型 Offer class 中的字段。或者...您可以将 float 类型保留为
amount 并简单地将 getAmount 方法定义为 return Float 类型。
下面是一个完整的工作示例。

你的编译错误是因为
原始类型 float 没有 compareTo 方法。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test002 {

    public static void main(String[] args) {
        List<Offer> lst = new ArrayList<Offer>();
        lst.add(new Offer());
        lst.add(new Offer());
        lst.add(new Offer());
        lst.add(new Offer());

        lst.get(0).setAmount(10f);
        lst.get(1).setAmount(2f);
        lst.get(2).setAmount(20f);
        lst.get(3).setAmount(1f);

        Collections.sort(lst, new Comparator<Offer>() {
              public int compare(Offer offer1, Offer offer2) {
                return offer1.getAmount().compareTo(offer2.getAmount());
              }
        });

        for (int i=0; i<lst.size(); i++){
            System.out.println(lst.get(i).getAmount());
        }
    }

}

class Offer {
    private Float amount;

    public Float getAmount() {
        return amount;
    }

    public void setAmount(Float amount) {
        this.amount = amount;
    }

}

听起来你可能想要:

return Float.compare(offer1.getAmount(), offer2.getAmount());

如果 getAmount() returns a float - 这意味着您将无法直接调用它的方法,但 Float.compare 是一个方便的解决方法。

如果 getAmount() 实际上 returns 一个 Float (并且你知道它将是非空的)你可以使用:

return offer1.getAmount(),compare(offer2.getAmount());

你需要这样的东西:

return offer1.getAmount() < offer2.getAmount() ? -1 
       : offer1.getAmount() > offer2.getAmount() ? 1 
       : 0;

getAmount() 的 return 类型似乎是一个 float,它是一个原始类型,因此没有任何方法与之相关。

您可以将 getAmount() 的 return 类型更改为 Float,或者在方法中添加强制转换并使用 Float#compareTo

public int compare(Offer offer1, Offer offer2) {
    return ((Float) offer1.getAmount()).compareTo(offer2.getAmount());
}

使用 Java 8 你可以更容易地做到这一点:

List<Offer> offers = eoClient.getOffers(url);
Collections.sort(offers, Comparator.comparing(Offer::getAmount));