error: no suitable method found for sort(int[],(o1,o2)->o2 - o1)

Socra·2023년 5월 20일
0

https://school.programmers.co.kr/learn/courses/30/lessons/154539

오류 발생

Arrays.sort(numbers, (o1, o2) -> o1 - o2);

int[] 을 역순으로 정렬하기 위해 람다식 Comparator를 인자로 사용 했더니 오류가 발생했다.

발생 원인

Comparator<T> 인터페이스는 제네릭 인터페이스이다.
int는 기본형(Primitive type)이므로 제네릭 타입이 될 수 없어 오류가 발생했다.

int[]의 오름차순 정렬은 Comparator 없이 Arrays.sort()로 가능하다.

해결 방법

방법1. int[]Integer[]으로 바꾼 후 정렬한다.

Integer nums[] = Arrays.stream(numbers).boxed().toArray(Integer[]::new);
Arrays.sort(nums, (o1, o2) -> o2 - o1);

또는

Integer nums[] = Arrays.stream(numbers).boxed().toArray(Integer[]::new);
Arrays.sort(nums, Collections.reverseOrder());

방법2. 오름차순으로 정렬하고 순서를 뒤집는다. (내림차순으로 정렬하려는 경우)

int[] reverse = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
	reverse[i] = numbers[numbers.length - i - 1];
}

방법3. int[]List<Integer>으로 바꾼 후 Collections.sort()를 사용해 정렬한다.

// import java.util.stream.Collectors
List<Integer> numList = Arrays.stream(numbers).boxed().collect(Collectors.toList());
Collections.sort(numList, Collections.reverseOrder());


Arrays.stream()을 호출해 List<Integer>로 바꾸는 방법 (Java 버전 별 메소드)
https://stackoverflow.com/questions/880581/how-can-i-convert-int-to-integer-in-java

https://stackoverflow.com/questions/29583035/no-suitable-method-found-for-sortint-anonymous-comparatorinteger

0개의 댓글