CS
Stream API: map vs flatMap
개발자 김마늘
2025. 3. 3. 21:50
Stream API의 map과 flatMap을 비교하고 정리한 글입니다.
Stream API의 map과 flatMap 차이점
- map: 스트림의 각 요소를 특정 연산을 거쳐 변환한 후 새로운 스트림을 반환합니다. 각 요소가 변환되지만, 결과적으로 스트림의 구조는 변하지 않습니다.
- flatMap: 각 요소를 스트림으로 변환한 후, 모든 결과 스트림을 하나의 스트림으로 평탄화(flatten)하여 반환합니다. 즉, 중첩된 스트림 구조를 제거합니다.
map 사용 예시
import java.util.List;
public class MapExample {
public static void main(String[] args) {
List<String> names = List.of("Alice", "Bob", "Charlie");
// 각 이름을 대문자로 변환
List<String> upperCaseNames = names.stream()
.map(String::toUpperCase)
.toList();
System.out.println(upperCaseNames); // [ALICE, BOB, CHARLIE]
}
}
map(String::toUpperCase)를 사용하여 각 문자열을 대문자로 변환합니다. 변환된 요소들이 새로운 리스트에 저장됩니다.
flatMap 사용 예시
import java.util.List;
public class FlatMapExample {
public static void main(String[] args) {
List<List<String>> listOfLists = List.of(
List.of("Apple", "Banana"),
List.of("Cherry", "Date"),
List.of("Fig", "Grape")
);
// 리스트 내부의 리스트들을 평탄화하여 하나의 리스트로 만듦
List<String> flattenedList = listOfLists.stream()
.flatMap(List::stream)
.toList();
System.out.println(flattenedList); // [Apple, Banana, Cherry, Date, Fig, Grape]
}
}
flatMap(List::stream)을 사용하여 각 내부 리스트를 스트림으로 변환한 후, 하나의 스트림으로 합칩니다. 결과적으로 List<String> 타입의 단일 리스트가 생성됩니다.
map vs flatMap 차이점 정리
map | Stream<T> | 각 요소를 변환한 새로운 스트림을 반환 (1:1 매핑) |
flatMap | Stream<T> | 각 요소가 스트림을 반환할 경우 이를 평탄화하여 하나의 스트림으로 합침 (1:N 매핑) |