colletion을 쓰다보면 Map과 flatMap을 사용하는 경우가 있다. 둘의 차이점을 알아보자.
Map은 입력 요소를 특정 함수에 매핑하여 각 요소를 변환하는 함수이다. 변환된 요소들이 그대로 스트림에 1:1로 포함이 된다.
import java.util.List;
import java.util.stream.Collectors;
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)
.collect(Collectors.toList());
System.out.println(upperCaseNames); // 출력: [ALICE, BOB, CHARLIE]
}
}
FlatMap도 각 요소를 스트림에 매핑하는건 똑같지만 한번 평평(flatten)하게 만들어준다. 따라서 중첩구조가 있는 경우 평탄화 시켜서 처리된다. (1:N 매핑)
import java.util.List;
import java.util.stream.Collectors;
public class FlatMapExample {
public static void main(String[] args) {
List<List<String>> nestedList = List.of(
List.of("Alice", "Bob"),
List.of("Charlie", "David"),
List.of("Eve")
);
// 중첩 리스트를 평탄화
List<String> flattenedList = nestedList.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(flattenedList); // 출력: [Alice, Bob, Charlie, David, Eve]
}
}