본문 바로가기
Java

[Java] Stream의 map() VS flatMap()

by 태크민 2023. 8. 24.

 먼저 결과를 말하자면, 

  • 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://engineer-mole.tistory.com/376#google_vignette