2014-04-04 2 views
0

을 반환해야합니다. 두 학생의 이름과 두 학생의 성이 동일하면 0을 반환하는 student.compareTo 메소드를 작성해야합니다. 학생의 이름이 전달 된 이름보다 사전 적으로 더 낮은 순서로 정렬되면 음수 값을 반환해야합니다. 학생 이름이 이전 이름보다 사전 적으로 더 높은 순위로 정렬하면 양수 값을 반환해야합니다.Java compareTo 메소드입니다. student.compareTo 메소드는

여기까지는 내 코드입니다. . 음수 값과 양수 값을 고정 값으로 사용해야합니까, 아니면 compareTo 값을 사용해야합니까?

public int compareTo(Student){ 
int comparison = (this.firstName.compareTo(Student.firstName)); 
int comparison2 = (this.lastName.compareTo(Student.lastName)); 

if (comparison == comparison2) 
    return 0; 
else if ((comparison=0 && comparison2<0) ||(comparison<0 && comparison2=0) 
    return -1; 
else 
    return 1; 
} 

이것은 다른 코드입니다. 나는이 제대로

public int compareTo(Student){ 
    String studentinfo=(this.firstName + this.lastName); 
String studentinfo2=(s1.firstName + s1.lastName); 
int comparison =studentinfo.compareTo(studentinfo2); 
return comparison; 
} 

답변

3

이 너무 복잡 ...

체인을했다 궁금 해서요 당신의 비교; 첫 번째 것이 0을 반환하는 경우에만 두 번째를 실행하십시오. 두 번째가 0을 반환하면 세 번째를 실행합니다.

즉, 이 아닌 인 첫 번째 비교 결과를 반환하거나 마지막 값을 반환합니다. 예 :

@Override 
public int compareTo(final Student other) 
{ 
    return ComparisonChain.start() 
     .compare(firstName, other.firstName) 
     .compare(lastName, other.lastName) 
     .result(); 
} 
:

@Override 
public int compareTo(final Student other) 
{ 
    int ret = firstName.compareTo(other.firstName); 
    if (ret != 0) // No need to go further 
     return ret; 

    // Hypothetic second comparison to do before lastName 
    // ret = foo.compareTo(other.foo); 
    // if (ret != 0) 
    //  return ret; 

    // Rinse, repeat... 

    // All previous comparisons returned 0, 
    // return the result of the last comparison 
    return lastName.compareTo(other.lastName); 
} 

구아바는에 대한 nice utility class있다