[Spring] map, flatMap

동민·2021년 10월 18일
0
List<String> players = Arrays.asList("Enzo", "Caicedo");

위 문자열 리스트에 스트림을 적용하여 아래와 같이 변환하려면?
=> EnzoCaicedo

map 을 사용한다면?

players.stream()
       .map(player -> player.split(""))
	   .forEach(arr -> System.out.print(Arrays.toString(arr)));

결과

[E, n, z, o][C, a, i, c, e, d, o]

(물론 map을 이용해서도 원하는 기대값을 만들 수 있지만 flatmap과 비교를 위해 위 로직으로 작성하였으니 이해 바랍니다.🙇🏻‍♂️)

=> split을 이용하여 분리했는데 List<String[]> 타입으로 변환됨. map은 컬렉션의 요소 하나하나를 접근하여 처리한다고 볼 수 있음.

이럴 때 필요한 메소드가 flatMap!

flatMap스트림 평면화라고도 불리며 중복 스트림을 1차원으로 평면화 시키는 메소드이다.

players.stream()
	   .map(player -> player.split(""))
	   .flatMap(Arrays::stream) // Arrays::stream 은 배열을 스트림으로 변환해주는 메소드 참조식
	   .forEach(System.out::print);

결과

EnzoCaicedo

=> flatMap을 사용하면 중복 구조로 되어있는 리스트를 하나의 스트림처럼 다룰 수 있다.

그 외

Spring Webflux(비동기, Non-blocking I/O) 메소드를 사용할 때는 Spring Webflux 전용 메소드를 사용하는 것이 좋다.

이전 버전의 메소드 사용 시, Blocking I/O(동기 처리)가 될 수 있음

참고

https://devjem.tistory.com/41

profile
BE Developer

0개의 댓글