我目前正在尝试按姓氏先排序我的对象,然后首先命名然后出生日期然后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