比较 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));
我有这个:
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));