2012-04-10 2 views
3

내 익명 비교기를 선언하여 Collections.sort를 사용하여 사용자 정의 클래스 배열 목록을 정렬하려고합니다. 그러나 정렬이 예상대로 작동하지 않습니다.Collections.sort를 사용하여 사용자 정의 클래스 배열 목록 문자열 정렬

내 코드

Collections.sort(arrlstContacts, new Comparator<Contacts>() { 

     public int compare(Contacts lhs, Contacts rhs) { 

      int result = lhs.Name.compareTo(rhs.Name); 

      if(result > 0) 
      { 
       return 1; 

      } 
      else if (result < 0) 
      { 
       return -1; 
      } 
      else 
      { 
       return 0; 
      } 
     } 
    }); 

결과는 정렬 된 순서가 아닌 것입니다. 아담 바와 같이

+4

"return lhs.Name.compareTo (rhs.Name)"을 사용할 수 있다는 것을 알고 계십니까? – Adam

+0

어떤 조건에서 이것이 작동하지 않습니까? 디버거를 사용하여 단계별 실행 및/또는 단위 테스트를 작성하십시오. – elevine

+0

@ 아담, 감사합니다 ... 동료가 ... – kaibuki

답변

9

말씀을 단순히 수행

Collections.sort(
    arrlstContacts, 
    new Comparator<Contacts>() 
    { 
    public int compare(Contacts lhs, Contacts rhs) 
    { 
     return lhs.Name.compareTo(rhs.Name); 
    } 
    } 
); 

원래 코드가 부정되는 사전적인 비교를 수행 String.compareTo 방법을. 예를 들어 비교 될 때 number1number123 문자열은 각각 -2와 2를 생성합니다.

단순하게 1, 0 또는 -1을 반환하면 병합 정렬의 병합 부분 Collections.sort 메서드가 목록의 문자열 사이에서 충분히 구분되지 않을 가능성이 있습니다 (결과적으로) 사전 순으로 정렬되지 않았습니다.

7

, 당신은 return (lhs.Name.compareTo(rhs.Name)); likeso 사용할 수 있습니다 : 아담처럼

Collections.sort(arrlstContacts, new Comparator<Contacts>() { 
    public int compare(Contacts lhs, Contacts rhs) { 
     return (lhs.Name.compareTo(rhs.Name)); 
    } 
}); 
+0

[아담의 의견] (http://stackoverflow.com/questions/10091110/sorting-custom-class-array-list-string-using- collections-sort # comment12923708_10091110). –

+0

댓글에 이미 답변되어있는 것을 보지 못했습니다. 편집 중 ... 감사합니다! –