본문 바로가기
오류 해결 내용

IntStream flatMap() 관련 오류 해결 내용 정리

by 임동무 2022. 12. 1.

오류 메시지 1. Bad return type in lambda expression: Stream<double[]> cannot be converted to IntStream

오류 메시지 2. no instance(s) of type variable(s) U exist so that Stream<U> conforms to IntStream

 

오류 메시지

rangeClosed(a,b) 로 반환된 IntStream 을 이용하여 피타고라스 수를 추출하는 경우 boxing 을 하지 않는 경우 위와 같은 오류를 발생한다.

내용을 보면 반환되는 U 타입의 인스턴스가 없어서 Stream<U> 를 IntStream 에 맞출 수 없다는 내용이다.

IntStream 에 맞춘다는 것은 flatMap 때문에 나온 내용 같다.

flatMap 은 여러 map 파이프를 하나의 Stream 으로 평면화하는 기능을 한다.

그러면

 

오류가 나는 이유는 저 위에서 사용하는 flatMap 이 IntStream.flatMap() 이기 때문이다. IntStream 의 flatMap() 은 반환형이 IntStream 이다. 즉, map 의 결과를 Stream<U> 의 형태가 아닌, Intstream 으로 반환을 해주어야 한다.

따라서 생성한 저 flatMap() 을 활용하면 flatMap 의 결과물을 IntStream 으로 반환해주어야 하는데 double 타입 배열은 IntStream 으로 변환할 수 없다. 따라서 오류를 발생시킨 것이다.

이를 해결하기 위해서는 IntStream.flatMap() 이 아니라

→ Stream.flatMap() 을 사용해야 한다. 즉, IntStream 을 boxing 하여 Stream<T> 형태로 만들어 준 후에 Stream.flatMap() 메서드를 사용하면 해당 오류를 없앨 수 있다.

댓글