比较ArrayList中的float

时间:2015-01-06 14:14:15

标签: java 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)
  }
});

我希望按照价格对我的arraylist进行排序,但我有这个错误:

 cannot resolve method compareToIgnoreCase(float)

出了什么问题

5 个答案:

答案 0 :(得分:5)

听起来你可能想要:

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

如果getAmount()返回float,则表示您无法直接调用方法,但Float.compare是一种方便的解决方法。

如果getAmount()实际返回Float(并且您知道它将为非空),您可以使用:

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

答案 1 :(得分:1)

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

此外,您应使用Float而不是float作为amount的类型 Offer课程中的字段。或者......您可以保留float类型 amount,只需定义getAmount方法即可返回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;
    }

}

答案 2 :(得分:1)

您需要以下内容:

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

答案 3 :(得分:1)

似乎getAmount()的返回类型是float,它是一个原始的,因此没有任何方法连接到它。

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

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

答案 4 :(得分:1)

使用Java 8,您可以更轻松地执行此操作:

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