IT/언어
[Java] Stream의 map과 flatMap의 차이점
개발자 두더지
2023. 4. 8. 19:28
728x90
결론
먼저 결과를 말하자면,
- map(T -> R)은 T 데이터 형을 R의 데이터형으로 1:1 변환
- flatMap(T -> R)은 T 데이터형에서 Stream<R>으로 1:N 변환
Stream의 map()
List<String> nameList = Arrays.asList("Tanaka", "Suzuki", "Takahashi");
Stream<Integer> stream = nameList.stream().map(x -> x.length());
System.out.println(stream.collect(Collectors.toList()));
실행 결과는 다음과 같다.
[6, 6, 9]
Tanaka | Suzuki | Takahashi |
↓ | ↓ | ↓ |
6 | 6 | 9 |
위와 같이 문자열에서 문자열 길이로 1:1변환하고 있다.
Stream의 flatMap()
List<String> nameList = Arrays.asList("Tanaka", "Suzuki", "Takahashi");
Stream<Object> stream = nameList.stream().flatMap(x -> Stream.of(x, x.length()));
System.out.println((stream.collect(Collectors.toList())));
실행 결과는 다음과 같다.
[Tanaka, 6, Suzuki, 6, Takahashi, 9]
Tanaka | Suzuki | Takahashi |
↓ | ↓ | ↓ |
Tanaka, 6 | Suzuki, 6 | Takahashi, 9 |
문자열에서 부터 [문자열, 문자열 길이]로 1:N으로 변환한다. 그러나 이 경우는 2차원 배열이 생성되는 것이 아닌 flat한 Stream이 반환되므로 주의할 필요가 있다.
참고자료
728x90