stream().mapToInt()는 Java Stream API에서 사용되는 메서드 중 하나로, Stream의 요소를 int형 정수로 변환하여 IntStream을 생성하는 역할을 합니다.
💡 사용 목적
mapToInt()는 주로 객체 스트림에서 정수값을 추출하고자 할 때 사용됩니다. 예를 들어, 어떤 객체 리스트에서 특정 필드(예: 나이, 점수 등)를 정수로 뽑아낼 때 유용합니다.
📌 기본 구조
Stream<T> stream = ...;
IntStream intStream = stream.mapToInt(element -> 변환할 int 값);
✅ 예시
List<String> list = List.of("1", "2", "3");
int sum = list.stream()
.mapToInt(Integer::parseInt) // String → int
.sum(); // IntStream 연산 사용
System.out.println(sum); // 출력: 6
위 코드에서:
mapToInt(Integer::parseInt)는String을int로 바꾸어IntStream으로 변환- 그 후
sum()을 통해 합계를 계산
🧠 왜 IntStream으로 변환하는가?
IntStream은 Stream<Integer>보다 효율적입니다:
- boxing/unboxing 비용 없음 (
int는 기본형,Integer는 객체형) sum(),average(),max()등 숫자 전용 메서드 사용 가능
Java에서 자주 나오는 개념인 boxing과 unboxing은 **기본형(primitive type)**과 객체형(wrapper class) 사이의 변환을 의미합니다. 아래에서 쉽게 정리해드릴게요.
🧱 기본형 vs 객체형
| 기본형 (Primitive) | 객체형 (Wrapper Class) |
|---|---|
int |
Integer |
double |
Double |
boolean |
Boolean |
| … | … |
📦 Boxing이란?
기본형 → 객체형 으로 감싸는 것
int a = 10;
Integer boxed = Integer.valueOf(a); // 명시적 boxing
Integer autoBoxed = a; // 자동 boxing (auto-boxing)
📤 Unboxing이란?
객체형 → 기본형 으로 풀어주는 것
Integer boxed = 10;
int unboxed = boxed.intValue(); // 명시적 unboxing
int autoUnboxed = boxed; // 자동 unboxing (auto-unboxing)
🔧 왜 중요한가?
📌 성능 차이
int는 메모리상에서 값만 저장 → 가볍고 빠름Integer는 객체이므로 힙에 저장되고 포인터 등 부가 비용 발생 → 느릴 수 있음
📌 예시: Stream<Integer> vs IntStream
List<Integer> list = List.of(1, 2, 3);
int sum1 = list.stream().mapToInt(i -> i).sum(); // IntStream, unboxing 안 해도 됨
int sum2 = list.stream().reduce(0, (a, b) -> a + b); // Integer 연산: boxing/unboxing 발생
✅ 결론
- boxing/unboxing은 변환 과정이며, 자동으로도 일어나지만 성능에 영향을 줄 수 있음
- Stream에서
mapToInt,mapToDouble등을 쓰는 이유 중 하나는 이러한 변환 비용을 피하기 위해서예요