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이 반환되므로 주의할 필요가 있다.


참고자료

https://qiita.com/KevinFQ/items/97137efb2159009b60e1

728x90