Java에서는 배열 안 요소들을 오름차순 또는 내림차순으로 정렬이 가능하게끔 메서드를 제공하고 있습니다. sort()는 Comparable에 의해 리턴되는 값을 비교하여 오름차순 또는 내림차순으로 배열을 정렬합니다.
int[] 배열을 Integer[] 객체 배열로 변환
int[] arr1 = {1, 5, 4, 2, 3};
Integer[] arr11 = Arrays.stream( arr1 ).boxed().toArray(Integer[]::new);
Integer[] 객체 배열을 int[] 배열로 변환
Integer[] arr1 = {1, 5, 4, 2, 3};
int[] arr11 = Arrays.stream( arr1 ).mapToInt(Integer::intValue).toArray();
//or
int[] arr12 = Arrays.stream( arr1 ).mapToInt(i -> i).toArray();
int 배열 정렬(오름차순)
int[] arr1 = {1, 5, 4, 2, 3};
Arrays.sort( arr1 );
System.out.println( Arrays.toString(arr1) ); // [1, 2, 3, 4, 5]
int 배열 정렬(내림차순)
//객체 배열
Integer[] arr1 = {1, 5, 4, 2, 3};
Arrays.sort( arr1, Collections.reverseOrder());
System.out.println( Arrays.toString( arr1) ); // [5, 4, 3, 2, 1]
Collections.reverseOrder()는 Comparator 객체입니다. Comparator는 직접 구현해야하지만, 내림차순은 자주 사용되기 때문에 Collections에서 기본으로 제공해주고 있습니다.
만약에 직접 구현한다면 Comper() 메서드를 아래와 같이 재정의(오버라이드)할 수 있습니다.
Integer[] arr1 = {1, 5, 4, 2, 3};
Arrays.sort(arr1, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println( Arrays.toString(arr1) ); // [5, 4, 3, 2, 1]
Lambda식으로 구현한다면 코드가 간결해집니다.
Integer[] arr1 = {1, 5, 4, 2, 3};
Arrays.sort( arr1, (o1, o2) -> (o2 - o1));
System.out.println( Arrays.toString(arr1) ); // [5, 4, 3, 2, 1]
int 배열의 부분 정렬
위 방법들은 배열(Array) 전체를 정렬합니다. 배열의 일부부만 정렬할 수 있습니다. 시작 index와 끝 index를 전달하여 정렬 범위를 지정합니다.
int[] arr1 = {1, 5, 4, 2, 3};
Arrays.sort(arr1, 0, 3); // index[0] 이상 index[3] 미만까지 정렬
System.out.println( Arrays.toString(arr1) ); // [1, 4, 5, 2, 3]