我目前正在尝试按姓氏排序我的对象,然后是名字,然后是出生日期,然后是ssn。但从逻辑上讲,我只能想出的是姓氏,然后是名字 任何提示?
public int compareTo(Doctor o)
{
int result = this.lastName.compareTo(o.lastName());
return result == 0 ?this.firstName.compareTo(((Doctor) o).firstName()):result;
}
答案 0 :(得分:1)
首先在姓氏上排序。如果排序值为0
,请对名字进行排序。如果结果为0
,请对出生日期进行排序,依此类推。你肯定会有多个return
语句,但它的可读性要高得多。
您可能知道,结果值0
表示两个值相等。在您的用例中,这应该导致额外的排序,而不是简单地返回值。
编辑:下面的其他答案为此提供了准确的实施。
答案 1 :(得分:1)
嵌套,如果是更好的选择来实现它。
public int compareTo(Doctor o){
int result = this.lastName.compareTo(o.lastName());
if(result==0){
result = this.firstName.compareTo(o.firstName());
if(result==0){
result = this.dob.compareTo(o.dob());
if(result==0){
....
}
}
}
return result;
}
答案 2 :(得分:1)
您可以使用以下内容:
public int compareTo(Doctor o)
{
int result = this.lastName.compareTo(o.lastName());
if (result != 0)
return result;
result = this.firstName.compareTo(o.firstName());
if (result != 0)
return result;
result = this.birthDate.compareTo(o.birthDate());
if (result != 0)
return result;
return this.ssn.compareTo(o.ssn());
}
答案 3 :(得分:0)
您可能已经意识到,这是一种“责任链”。所以我建议你这个案例的模式。 Chain-of-responsibility Pattern
它会使你免于写太多if()... s