我有这个:
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)
出了什么问题
答案 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));