Java 使用CompareTo比较数组中的字符串和双精度值?
我被指派使用插入排序和选择排序对输入值数组进行排序。我在重写Java 使用CompareTo比较数组中的字符串和双精度值?,java,arrays,sorting,Java,Arrays,Sorting,我被指派使用插入排序和选择排序对输入值数组进行排序。我在重写项类中的比较方法时遇到了一些问题。我希望对其进行排序,以便如果两个项目的定价相同,则根据类别进行比较。因此,儿童(C)项目首先出现,然后是M,然后是女性。这是我的代码,每次我试图编译它时,我都会收到一个错误,说明不能引用double public int compareTo (Object other) { int result; double otherPrice = ((Item)other).getClo
项
类中的比较
方法时遇到了一些问题。我希望对其进行排序,以便如果两个项目的定价相同,则根据类别进行比较。因此,儿童(C)项目首先出现,然后是M,然后是女性。这是我的代码,每次我试图编译它时,我都会收到一个错误,说明不能引用double
public int compareTo (Object other) {
int result;
double otherPrice = ((Item)other).getClothPrice();
String otherCategory = ((Item)other).getClothCategory();
if (clothPrice == otherPrice)
result = clothCategory.compareTo(otherCategory);
else
result = clothPrice.compareTo(otherPrice);
return result;
}
首先,您的compareTo
方法应该将项
作为参数。如果这导致编译器错误,请确保项
正在实现可比
要比较基本双值,请使用:
如果您使用的是Java 8,您可能更喜欢使用一些更高级的功能,这些功能使扩展此代码变得更简单:
private static final Comparator<Item> naturalOrdering = Comparator
.comparingDouble(Item::getClothPrice)
.thenComparing(Item::getClothCategory);
public int compareTo(Item other) {
return naturalOrdering.compare(this, other);
}
private static final Comparator naturalOrdering=Comparator
.comparingDouble(项目::getClothPrice)
.然后比较(项目::getClothCategory);
公共整数比较(项目其他){
回归自然法则。比较(这个,其他);
}
我忘了添加可比较的,谢谢你,我最终通过将else改为result=Double.compare(clothPrice,otherPrice)使代码正常工作;“那会完成同样的事情吗?”@TommyHarvey是的,那会完成同样的事情。我刚刚按照大多数人编写代码的方式重写了您的代码。好的,谢谢您,我只是偏离了课堂上给出的示例。非常感谢您的帮助哇,我不知道比较器。谢谢是否应该缓存Comparator
对象以提高性能,而不是在每次调用compareTo
时重新实例化该对象?@BasilBourque是的,使用静态
字段缓存Comparator
对象会更有效。
private static final Comparator<Item> naturalOrdering = Comparator
.comparingDouble(Item::getClothPrice)
.thenComparing(Item::getClothCategory);
public int compareTo(Item other) {
return naturalOrdering.compare(this, other);
}