타입
[Java] Stream Sorted(Comparator.reverseOrder()) 오류
2022. 9. 27. 20:47
오늘도 어김없이 알고리즘 문제를 풀던 도중 컴파일 에러가 발생했다.
int[] arr = new int[] {90, 10, 30, 50, 20, 100};
// 배열의 제거를 편하게 하기 위해 정렬된 List 생성
List<Integer> list = Arrays.stream(arr)
.sorted()
.boxed()
.collect(Collectors.toList());
▲ 해당 코드는 문제가 없다.
위 코드에서 List를 역순으로 정렬하고자 아래와 같이 코드를 변경했다.
int[] arr = new int[] {90, 10, 30, 50, 20, 100};
// 배열의 제거를 편하게 하기 위해 정렬된 List 생성
List<Integer> list = Arrays.stream(arr)
.sorted(Comparator.reverseOrder())
.boxed()
.collect(Collectors.toList());
▲ Comparator.reverseOrder()에 빨간 밑줄 발생~
뭐가 문제인지도 모르고 한참을 구글링을 하다가 IntelliJ에 떠있는 반환 타입이 눈에 들어왔다.
IntStream
?? Stream<Integer>
?? IntStream에서는 역순 정렬을 못하나??
자바 공식문서 Stream에 살펴보니 sorted()
와 sorted(Comparator<T> c)
가 인터페이스의 메소드로 오버로딩되어 있는 것을 볼 수 있었고,
// sorted -> boxed
List<Integer> list = Arrays.stream(arr)
.sorted()
.boxed()
.collect(Collectors.toList());
// boxed -> sorted
List<Integer> list = Arrays.stream(arr)
.boxed()
.sorted()
.collect(Collectors.toList());
위 코드처럼 서로의 위치를 바꾼 상태에서 cmd + B
를 입력해 코드의 선언부로 각각 이동해보니
위의 IntStream
에서 사용한 sorted()
메소드는 IntStream.java
에서 선언되어 있었고,
IntStream sorted();
아래의 Stream<Integer>
에서 사용한 sorted()
메소드는 Stream.java
에서 선언되어 있었다.
Stream<T> sorted(Comparator<? super T> comparator);
매개 변수를 아무것도 받지 않으니 에러가 날 수 밖에 없었다...
'Java' 카테고리의 다른 글
[Java] 백그라운드에서 빌드 파일 실행하기 (nohup, &) (0) | 2022.12.05 |
---|---|
[Java] 깊은 복사와 얕은 복사 (Deep Copy & Shallow Copy) (0) | 2022.09.29 |