궁금증 연구소

안녕하세요. 궁금증연구소입니다.

오늘 포스팅 주제는 " IntStream의 map 메서드와 Stream <Integer>의 map 메서드의 차이"입니다.

 

package lv01;
import java.util.Arrays;
import java.util.stream.Collectors;


public class Test3 {

	public static void main(String[] args) {

		class Solution {
		    public String solution(int age) {
		        String[] ref = {"a","b","c","d","e","f","g","h","i","j"};
		        return
		        Arrays.stream(String.valueOf(age).split(""))
		              .mapToInt(Integer::valueOf)
//		              .boxed()
		              .map(i -> ref[i])
		              .collect(Collectors.joining());
		        
		    }
		}

	}

}

프로그래머스의 lv0외계행성의 나이 문제를 위와 같은 방식으로 풀었습니다.

input값으로 주어지는 숫자를 각각 인덱스로 활용하기 위해서입니다.

  1. 외계행성의 나
에러발생

그러나 이와 같이 에러가 발생합니다. 

이유는 IntStream의 map 함수와 Stream <Integer>의 map 함수가 다르기 때문입니다.

 

 

출처- java 공식문서

먼저 IntStream의 map은 IntUnarayOperator를 매개변수로 받아서 Instream을 리턴합니다. 즉, 인풋과 아웃풋이 Int형으로 일치해야 하는 것입니다. 그런데, 위 코드는 아웃풋이 String [] 배열의 참조값인 String형이므로 에러가 발생합니다.

 

출처-java공식문서(map)

 

반면 boxed()를 통해 Stream <Integer>로 만들어준 상태에서 map을 쓰면 에러가 사라집니다.

Stream <Integer>의 map은 객체 간 변환이 가능하게 하는 Function을 매개변수로 받아서, 변경된 객체의 스트림을 리턴하기 때문입니다. 

 

차이점(출처- chat-gpt)

 

같은 map이지만, 어떤 스트림에서 사용하느냐에 따라, 매개변수의 타입이 변경될 수 있으므로, 주의해서 사용하는 것이 좋습니다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading