2013-03-24 79 views
0

我目前正在嘗試按姓氏先排序我的對象,然後首先命名然後出生日期然後ssn。但邏輯上,我只能拿出姓氏那麼名字 的任何提示?收集排序多項

public int compareTo(Doctor o) 
{ 
    int result = this.lastName.compareTo(o.lastName()); 

    return result == 0 ?this.firstName.compareTo(((Doctor) o).firstName()):result; 
} 

回答

1

首先按姓氏排序。如果排序值爲0,請按名字排序。如果結果爲0,則按出生日期排序,依此類推。當然你會有多個return聲明,但它更具可讀性。

如您所知,結果值0表示兩個值相等。在你的用例中,這應該導致額外的排序,而不是簡單地返回值。

編輯:下面的其他答案已經提供了這個確切的實施。

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; 
} 
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()); 
} 
0

正如你可能已經意識到,這是一種「責任鏈」的。所以我會建議你這種情況下的模式。 Chain-of-responsibility Pattern

它可以幫你節省太多if()... s