2012-10-22 6 views
0

각 개체 내에서 long present 값을 기준으로 ArrayList를 정렬하려고합니다. 인터넷을 둘러싼 다양한 예제를 따른 후에 다음 코드를 생각해 냈지만 원하는대로 정렬하지 않습니다 (객체의 일부를 잘라내는 것처럼 보입니다).Long 값을 기준으로 ArrayList 정렬

public static Comparator<Customer> compareSIN = 
     new Comparator<Customer>() { 
      public int compare(Customer cust1, Customer other) { 
       String sin1 = "" + cust1.sin; 
       String sin2 = "" + other.sin; 
       return sin1.compareTo(sin2); 
      } 
     }; 

나를 올바르게 개체를 정렬하지 못하게하는 코드의 첫 번째 조각에서 누락 된 부분을 알려주십시오.

감사합니다.

답변

3

제목에서 Customer.sinlong이라고 가정합니다. 문제는 숫자 값이 아닌 String으로 비교하려고하는 것입니다.

(예 : 10000이 다음 사 전적으로 작은 - 그래서 오류 여기에 String의 사용)

당신은 Long.compare()를 사용한다 (가정 자바 7) :

public static Comparator<Customer> compareSIN = 
     new Comparator<Customer>() { 
      public int compare(Customer cust1, Customer other) { 
       return Long.compare(cust1.sin,other.sin); 
      } 
     }; 
+0

감사합니다. Long.compare() 구문이 무엇인지 명확히 설명해 주시겠습니까? – n0shadow

+0

간단한 빼기를 통해 Long.compare()를 사용하는 이유는 무엇입니까? 궁금해. –

+1

@mCode : 예, 편집을 참조하십시오. – amit

2

compareTo() 방법에는 실제로 compareTo() 방법을 사용할 필요가 없습니다.

비교 결과가 동일하지 않은 경우 음수 또는 양수인 경우 0을 반환해야 함을 비교합니다.

이러한 이유 때문에 두 long을 다른 것으로부터 뺀 값을 반환하여 비교할 수 있습니다. other.sin cust1.sin 보다 큰 다른 경우 큰 cust1.sin 보다 긍정적 인 경우 음수가 동일하면 0을 반환 볼 수

public int compare(Customer cust1, Customer other) { 
      return cust1.sin - other.sin; 
} 

이됩니다. 죄가입니다.

+0

나는 그가 String으로 비교하기를 원한다고 생각한다. 내가 실수하지 않는다면 – amphibient

+0

나는 compareTo 메소드를 사용할 수 있기 때문에 그가 문자열로 변환하고 있다고 생각한다. 그의 제목과 설명에서 그는 long 값을 비교하기를 원합니다. 문자열 표현을 비교하면 무엇이 달성 될까요? –

+0

내 취향에 아무것도 아니지만 어떤 목적으로 문자열로 변환하고 있다고 가정했습니다. – amphibient

0

당신은 대신 String의 비교 long s. "10"및 "5", 결과가 될 것 "10"< "5" 당신이 long 작업하고 생각하는 반면, 당신은 10> 5를 얻을 것으로 예상 : 그래서

, 비교하려는 생각 ...

문제를 설명 할 수 있습니다.