타입

Java Stream

 

오늘도 어김없이 알고리즘 문제를 풀던 도중 컴파일 에러가 발생했다.

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 (Java Platform SE 8 ) - Oracle Help Center

자바 공식문서 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);

 

 

매개 변수를 아무것도 받지 않으니 에러가 날 수 밖에 없었다...

+ Recent posts