Java 一个值类可以有两个compareTo方法吗?
快速示例是用户名字和姓氏的集合 一种方法要求我使用名字进行比较,另一种方法使用姓氏进行比较。是否可能有两个不同的compareTo()Java 一个值类可以有两个compareTo方法吗?,java,sorting,collections,comparable,Java,Sorting,Collections,Comparable,快速示例是用户名字和姓氏的集合 一种方法要求我使用名字进行比较,另一种方法使用姓氏进行比较。是否可能有两个不同的compareTo() 还是我最好创建两个不同的值类?不,您不能,但您可以为每个订单创建一个单独的值类 您可以在java中使用比较器 在这个例子中,我使用Comparable CompareTo方法比较了Fruit对象,这里使用Comparator比较了quantity,如果您希望使用fruitDesc比较这个对象,那么像我对fruitName所做的那样,再创建一个静态内部类 publ
还是我最好创建两个不同的值类?不,您不能,但您可以为每个订单创建一个单独的值类 您可以在java中使用比较器 在这个例子中,我使用Comparable CompareTo方法比较了Fruit对象,这里使用Comparator比较了quantity,如果您希望使用fruitDesc比较这个对象,那么像我对fruitName所做的那样,再创建一个静态内部类
public class Fruit implements Comparable<Fruit>{
private String fruitName;
private String fruitDesc;
private int quantity;
public Fruit(String fruitName, String fruitDesc, int quantity) {
super();
this.fruitName = fruitName;
this.fruitDesc = fruitDesc;
this.quantity = quantity;
}
public String getFruitName() {
return fruitName;
}
public void setFruitName(String fruitName) {
this.fruitName = fruitName;
}
public String getFruitDesc() {
return fruitDesc;
}
public void setFruitDesc(String fruitDesc) {
this.fruitDesc = fruitDesc;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public int compareTo(Fruit compareFruit) {
int compareQuantity = ((Fruit) compareFruit).getQuantity();
//ascending order
return this.quantity - compareQuantity;
//descending order
//return compareQuantity - this.quantity;
}
public static Comparator<Fruit> FruitNameComparator
= new Comparator<Fruit>() {
public int compare(Fruit fruit1, Fruit fruit2) {
String fruitName1 = fruit1.getFruitName().toUpperCase();
String fruitName2 = fruit2.getFruitName().toUpperCase();
//ascending order
return fruitName1.compareTo(fruitName2);
//descending order
//return fruitName2.compareTo(fruitName1);
}
};
}
公共类{
私有字符串名称;
私有字符串;
私人整数数量;
公共水果(字符串FROUTCNAME、字符串FROUTCDESC、整数数量){
超级();
this.fruthName=fruthName;
this.fruitDesc=fruitDesc;
这个。数量=数量;
}
公共字符串getFruthName(){
返回水果名;
}
public void setFruitName(字符串fruitName){
this.fruthName=fruthName;
}
公共字符串getFruitDesc(){
返回结果描述;
}
public void setFruitDesc(字符串fruitDesc){
this.fruitDesc=fruitDesc;
}
公共整数getQuantity(){
退货数量;
}
公共无效设置数量(整数数量){
这个。数量=数量;
}
公共内部比较(水果比较和葡萄柚){
int compareQuantity=((水果)compare柚子).getQuantity();
//升序
返回此.quantity-comparequality;
//降序
//return comparequality-this.quantity;
}
公共静态比较器
=新的比较器(){
公共int比较(水果水果1、水果水果2){
字符串fruitName1=fruit1.getFruitName().toUpperCase();
字符串fruitName2=fruit2.getFruitName().toUpperCase();
//升序
返回果名1.compareTo(果名2);
//降序
//返回果名2.compareTo(果名1);
}
};
}
使用compareTo
意味着您正在使用Comparable
接口,该接口仅为您的类定义一个“自然顺序”
要进行任何其他排序,最好创建一个单独的类,为您需要的每个排序实现
Comparator
。您不需要创建不同的值类。请参考:(与您的要求相同)如何调用任何一个比较方法?@yao jiang,对于第二个公共int比较(Fruit-fruit1,Fruit-fruit2),您必须使用fuit.Fruit-NameComparator fC=Fruit.new-Fruit-NameComparator();fC.比较(object1,object2),第一个水果=新水果();水果3=新水果();水果。比较(水果3)