Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个值类可以有两个compareTo方法吗?_Java_Sorting_Collections_Comparable - Fatal编程技术网

Java 一个值类可以有两个compareTo方法吗?

Java 一个值类可以有两个compareTo方法吗?,java,sorting,collections,comparable,Java,Sorting,Collections,Comparable,快速示例是用户名字和姓氏的集合 一种方法要求我使用名字进行比较,另一种方法使用姓氏进行比较。是否可能有两个不同的compareTo() 还是我最好创建两个不同的值类?不,您不能,但您可以为每个订单创建一个单独的值类 您可以在java中使用比较器 在这个例子中,我使用Comparable CompareTo方法比较了Fruit对象,这里使用Comparator比较了quantity,如果您希望使用fruitDesc比较这个对象,那么像我对fruitName所做的那样,再创建一个静态内部类 publ

快速示例是用户名字和姓氏的集合

一种方法要求我使用名字进行比较,另一种方法使用姓氏进行比较。是否可能有两个不同的compareTo()


还是我最好创建两个不同的值类?

不,您不能,但您可以为每个订单创建一个单独的值类

您可以在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)