List<String> players = Arrays.asList("Enzo", "Caicedo");
위 문자열 리스트에 스트림을 적용하여 아래와 같이 변환하려면?
=> EnzoCaicedo
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
은 스트림 평면화
라고도 불리며 중복 스트림을 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(동기 처리)
가 될 수 있음