안녕하세요. 궁금증연구소입니다.
오늘 포스팅 주제는 " 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값으로 주어지는 숫자를 각각 인덱스로 활용하기 위해서입니다.
그러나 이와 같이 에러가 발생합니다.
이유는 IntStream의 map 함수와 Stream <Integer>의 map 함수가 다르기 때문입니다.
먼저 IntStream의 map은 IntUnarayOperator를 매개변수로 받아서 Instream을 리턴합니다. 즉, 인풋과 아웃풋이 Int형으로 일치해야 하는 것입니다. 그런데, 위 코드는 아웃풋이 String [] 배열의 참조값인 String형이므로 에러가 발생합니다.
반면 boxed()를 통해 Stream <Integer>로 만들어준 상태에서 map을 쓰면 에러가 사라집니다.
Stream <Integer>의 map은 객체 간 변환이 가능하게 하는 Function을 매개변수로 받아서, 변경된 객체의 스트림을 리턴하기 때문입니다.
같은 map이지만, 어떤 스트림에서 사용하느냐에 따라, 매개변수의 타입이 변경될 수 있으므로, 주의해서 사용하는 것이 좋습니다.
[java] IntStream.iterate() 와 Stream.iterate() 의 차이점은? (0) | 2023.05.12 |
---|---|
[Java] Locale.Root 사용하는 이유 (0) | 2023.05.12 |
[java] 와일드카드의 쓸모:: 읽을수 있으나, 쓸수 없다(vice-versa) (0) | 2023.04.10 |
[Java] 람다와 익명내부클래스의 차이점은? (0) | 2023.04.10 |
[java] 람다식의 유효범위와 effective final (0) | 2023.04.10 |