我目前正在嘗試按姓氏先排序我的對象,然後首先命名然後出生日期然後ssn。但邏輯上,我只能拿出姓氏那麼名字 的任何提示?收集排序多項
public int compareTo(Doctor o)
{
int result = this.lastName.compareTo(o.lastName());
return result == 0 ?this.firstName.compareTo(((Doctor) o).firstName()):result;
}
我目前正在嘗試按姓氏先排序我的對象,然後首先命名然後出生日期然後ssn。但邏輯上,我只能拿出姓氏那麼名字 的任何提示?收集排序多項
public int compareTo(Doctor o)
{
int result = this.lastName.compareTo(o.lastName());
return result == 0 ?this.firstName.compareTo(((Doctor) o).firstName()):result;
}
首先按姓氏排序。如果排序值爲0
,請按名字排序。如果結果爲0
,則按出生日期排序,依此類推。當然你會有多個return
聲明,但它更具可讀性。
如您所知,結果值0
表示兩個值相等。在你的用例中,這應該導致額外的排序,而不是簡單地返回值。
編輯:下面的其他答案已經提供了這個確切的實施。
嵌套如果將是更好的選擇來實現這一點。
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;
}
您可以使用以下方法:
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());
}
正如你可能已經意識到,這是一種「責任鏈」的。所以我會建議你這種情況下的模式。 Chain-of-responsibility Pattern
它可以幫你節省太多if()... s