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
'IT > 언어' 카테고리의 다른 글
[Vue.js] Vuex를 가볍게 배워보자 (0) | 2023.04.13 |
---|---|
[Java] Java에서 자주 사용하는 Collection 구현 클래스의 구조와 특징 (0) | 2023.04.09 |
[Java] Stream API의 anyMatch(), allMatch(), noneMatch() (0) | 2023.04.06 |
[Vue.js] v-if와 v-show의 차이 (0) | 2023.03.31 |
[Vue.js] 부모 컴포넌트에서 자식 컴포넌트의 메소드 실행시키기 (0) | 2023.03.31 |