快速示例是用户名和姓的集合。
一种方法要求我使用名字进行比较,使用姓氏进行比较。是否可以有两个不同的compareTo()?
或者我最好创建两个不同的值类?
答案 0 :(得分:5)
您可以在java中使用Comparator
在这个例子中,我使用Comparable比较FruitName使用Comparable CompareTo方法和数量基于fruitName,如果你想使用fruitDesc比较这个对象,那么就像我为fruitName做的那样创建一个更多的静态内部类/ p>
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);
}
};
}
答案 1 :(得分:3)
不,你不能,但你可以为每个订单创建一个单独的Comparator
。
答案 2 :(得分:3)
使用compareTo
表示您使用的是Comparable
界面,该界面只为您的班级定义了一个“自然顺序”。
要进行任何其他排序,最好创建一个单独的类,为您需要的每个排序实现Comparator
。您不需要创建不同的值类。