int[] arr = {5,1,3,4,2};
// 오름차순 정렬
Arrays.sort(arr);
위와 같이 정수형 배열을 오름차순으로 정렬하려면 Arrays.sort
메소드를 사용하면 된다. 특정 구간을 정렬하려고 하면 Arrays.sort(arr, 시작, 끝)
을 통해 구간을 오름차순으로 정렬할 수 있다.
내림차순으로 정렬하고 싶다면 어떻게 해야할까?
매개변수가 없는 sort
자체는 오름차순 정렬밖에 지원하지 않는다. 그럼 매개변수에 비교기준을 반대로 넣으면 되지 않을까?Arrays.sort((num1,num2)-> num2 - num1);
와 같이 말이다.
하지만, 이는 불가능한데 sort
메서드가 Comparator 함수형 인터페이스를 매개변수로 사용하고 있기 때문이다. Comparator
인터페이스는 객체간의 비교가 가능하게 해주는 인터페이스이다.
그러나, 우리가 정렬(비교)하고자 하는 배열은 기본형 배열이다.
따라서, 이를 정렬하고자 하면 int
형을 객체로 만들어야 한다. int
의 래퍼 클래스인Integer
클래스를 사용하면 된다.
int[] arr = {1,2,3,4,5};
Integer[] boxedArray = Arrays.stream(arr)
.boxed() // 기본형인 int형을 참조형인 Integer 클래스로 바꿈
.toArray(Integer[]::new); // Integer[] 배열로 바꿔저장
Integer[] boxedArray = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) {
boxedArray[i] = arr[i];
}
래퍼 클래스를 활용해 기본 자료형 배열을 Integer
클래스형 배열로 바꿔줬다.
Arrays.sort(boxedArray, Comparator.reverseOrder());
Arrays.sort(boxedArray, (num1, num2) -> num2 - num1);
System.out.println(Arrays.toString((boxedArray));
// 출력결과 : [5, 4, 3, 2, 1]
이제 위와 같이 Comparator
인터페이스의 reverseOrder 메서드나 직접 람다식을 작성해 내림차순으로 정렬할 수 있다.