2013-03-24 65 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