Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다.
Transform
- Reactor 에는 데이터 변형시킬 수 있는 많은 연산자(Operators) 가 준비되어 있음
연습
// TODO Capitalize the user username, firstname and lastname
Mono<User> capitalizeOne(Mono<User> mono) {
return mono.map(u -> new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase()));
}
// TODO Capitalize the users username, firstName and lastName
Flux<User> capitalizeMany(Flux<User> flux) {
return flux.map(u -> new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase()));
}
// TODO Capitalize the users username, firstName and lastName using #asyncCapitalizeUser
Flux<User> asyncCapitalizeMany(Flux<User> flux) {
return flux.flatMap(this::asyncCapitalizeUser);
}
Mono<User> asyncCapitalizeUser(User u) {
return Mono.just(new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase()));
}
Flux
또는Mono
를 이용하고,flatMap
연산을 이용하면 비동기 처리가 가능하다T
를U
로 변환 하려고 할때,flatMap
은 함수를 통해T
를Publisher<U>
로 처리하여 비동기가 가능하게 됨(map
의 경우,T
를 인자로 받아U
를 리턴하는 함수를 이용함)
flatMap
은 내부적으로Publisher<U>
을 모두 구독하고, 하나의 단일 결과로 머지 합니다.Publisher<U>
의 응답값에 따라서 결과Flux
의 순서가 변경될 수 있습니다.
관련글
2021.03.02 - [learning] - Reactive Programming 소개 (1/12)
2021.03.09 - [learning] - StepVerifier 사용 방법 (4/12)
보다 자세한 FlatMap 동작 방식은 jngcii 님의 'flatMap 알아보기' 글을 살펴보아요
flatMap 알아보기
Flux.range(1, 10).flatMap( A ).map(i -> i * 10).subscribe(System.out::println); flatMap이 어떻게 동작하는지 알아보기 위해, 다음 코드의 동작을 잘 살펴보려 한다. A에 함수에 따라 달라지는 동작을 그림과..
jngcii.tistory.com