2012-12-08 2 views
-1

가능한 중복 :
Sorting Java objects using multiple keys정렬 객체

나는 직원 클래스가 있습니다. 직원 이름을 기준으로 정렬하고 싶습니다. 두 개체 (즉, 두 명의 직원)의 직원 이름이 같으면 직원 나이와 관련하여 정렬하려고합니다.

@Override 
public int compareTo(Employee o) { 
    return name.compareTo(o.getName()); 
} 

코드의이 비트는 나를 위해 잘 작동 :

직원 이름을 w.r.t 정렬, 나는 Comparable 인터페이스를 구현하고이 코드를 사용했다. 그러나 두 명의 직원의 이름이 같은 나이를 기준으로 정렬을 통합하는 방법을 이해할 수 없습니까?

비교기를 사용해야합니까? 나는 이것을 달성하는 방법을 모르겠습니다. 이름 (즉 0의 결과) 같은 경우

당신은 연령을 기준으로 정렬 한 후 다음

답변

1

을 할 수 있습니다 도와주세요. 이름이 0이 아닌 결과를 반환 할 경우 단지

예를

@Override 
public int compareTo(Employee o) { 
    int i = name.compareTo(o.getName()); 
    if (i == 0) { //ie the names are the same 
     return age.compareTo(o.getAge(); 
    } 
    return i; 
} 
-1

대한 설명의 논리가 직접 코드로 변환해야 반환 :

public int compareTo(Employee o) 
{ 
    firstfield = name.compareTo(o.name()) 
    if(firstfield == 0) 
    { 
     return age.compareTo(o.age()) 
    } 
    else 
    { 
     return firstfield 
    } 
} 

또한 작업을 할 수 있습니다 비교할 새 문자열을 구성하여

public int compareTo(Employee o) 
{ 
    me = sprintf("%s:%d", name, age) 
    them = sprintf("%s:%d", o.name, o.age) 
    return me.compareTo(them) 
} 
+0

수행하는 두 번째 방법은 끔찍한이며, 작동하지 않습니다. 첫 번째 방법은 이미 RNJ에 의해 답변으로 주어졌지만, 그의 답변은 잘 컴파일되는 반면, 네 대답은 그렇지 않다. –

0

직원을 저장할 수 있습니다. int 오 ArrayList에, 그럼 이제 아래로은, Collections.sort를 사용할 수 있습니다

public class CustomComparator implements Comparator<Employee> { 
    @Override 
    public int compare(Employee o1, Employee o2) { 
     return o1.getAge().compareTo(o2.getAge()); 
    } 
} 

은, Collections.sort

를 사용하여 정렬 할 수 있습니다

Collections.sort(employeeList, new CustomComparator()); 
+0

-1 이것은 직원의 이름을 고려하지 않습니까? 이름이 같은 경우 질문에 나이 별로만 정렬하는 것으로 표시됩니다. – RNJ