2011-03-22 4 views
24

말을 정렬하려면, 우리는 다음과 같은 2 차원 배열을 가지고자바 비교기 클래스는 배열

자바 Comparator 클래스 Arrays.sort(camels, comparator)를 사용하여 내림차순으로 그들의 첫 번째 요소에 의해 배열을 정렬 선언해야 어떻게
int camels[][] = new int[n][2]; 

? 참고 용 compare 기능은 다음과 같습니다

@Override public int compare(int[] a, int [] b) 
{ 
    return b[0] - a[0]; 
} 

답변

47

[...] 자바 비교기 클래스가 순서 감소에 자신의 첫번째 요소에 의해 배열을 정렬 선언해야 어떻게 [...]

여기

자바 8를 사용하여 완벽한 예입니다 :

import java.util.*; 

public class Test { 

    public static void main(String args[]) { 

     int[][] twoDim = { {1, 2}, {3, 7}, {8, 9}, {4, 2}, {5, 3} }; 

     Arrays.sort(twoDim, Comparator.comparing((int[] arr) -> arr[0]) 
             .reversed()); 

     System.out.println(Arrays.deepToString(twoDim)); 
    } 
} 
,363,210

출력 : 를 들어

[[8, 9], [5, 3], [4, 2], [3, 7], [1, 2]] 

자바 7 당신이 할 수 있습니다

Arrays.sort(twoDim, new Comparator<int[]>() { 
    @Override 
    public int compare(int[] o1, int[] o2) { 
     return Integer.compare(o2[0], o1[0]); 
    } 
}); 

자바 6 이상에서 작동 불행한 당신이 만약, 너는 할 것이다 :

Arrays.sort(twoDim, new Comparator<int[]>() { 
    @Override 
    public int compare(int[] o1, int[] o2) { 
     return ((Integer) o2[0]).compareTo(o1[0]); 
    } 
}); 
+0

오래된 스레드를 불러 와서 죄송하지만 왜 compare 메소드를 반환 할 때 Integer로 캐스팅해야합니까? –

+0

@EvolutionaryHigh, 왜냐하면'int'에서'.compareTo'를 호출 할 수 없기 때문입니다. – aioobe

+0

@Override 주석은 java 5에서 작동하지 않습니다. http://stackoverflow.com/questions/987973/why-does-eclipse-complain-about-override-on-interface-methods – jontro