이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/OthersOperations 에 대한 문제풀이이다.
이번 장은 Reactor 3의 다양하고 유용한 Operator들에 대해 살펴본다.
먼저, zip Operator는 복수개의, 각각의 레이턴시를 두고도착하는 Publisher들을 합쳐서 연산할 수 있는 Operator이다.
Flux<User> userFluxFromStringFlux(Flux<String> usernameFlux, Flux<String> firstnameFlux, Flux<String> lastnameFlux) {
return Flux.zip(
(args) -> {
return new User((String) args[0], (String) args[1], (String) args[2]);
},
usernameFlux, firstnameFlux, lastnameFlux
);
}
두 모노 중 먼저 생상되는 Mono만을 생산하도록 할 수도 있다.
Mono<User> useFastestMono(Mono<User> mono1, Mono<User> mono2) {
return Mono.first(mono1, mono2);
}
Flux는 복수의 값을 생산하는 Publisher인데, 두 Flux중 첫값을 먼저 생산하는 Flux만을 생산하는 것 역시 가능하다.
Flux<User> useFastestFlux(Flux<User> flux1, Flux<User> flux2) {
return Flux.firstEmitting(flux1, flux2);
}
Flux의 then() 메서드는 항상 Mono<Void>를 반환한다.
Mono<Void> fluxCompletion(Flux<User> flux) {
return flux.then();
}
Reactive Streams는 null을 허용하지 않는데, null처리를 할 수 있는 방법들도 존재한다.
Mono<User> nullAwareUserToMono(User user) {
return Mono.justOrEmpty(user);
}
Mono<User> emptyToSkyler(Mono<User> mono) {
return mono.defaultIfEmpty(User.SKYLER);
}
Flux가 생산하는 모든 요소들을 하나의 List로 만들어, 해당리스트를 생산하는 Mono를 만들 수 있다.
Mono<List<User>> fluxCollection(Flux<User> flux) {
return flux.collectList();
}
참고
tech.io/playgrounds/929/reactive-programming-with-reactor-3/OthersOperations
사업자 정보 표시
1 | g | asdf | 사업자 등록번호 : 123-12-12345 | TEL : 010-111-1111 | Mail : asdf@gmail.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'Reactive Programmingaaa > Reactor 기초 문제풀이~' 카테고리의 다른 글
07 Blocking to Reactive (0) | 2021.03.30 |
---|---|
06 Reactive To Blocking (1) | 2021.03.30 |
04 Adapt (0) | 2021.03.30 |
03 Request (0) | 2021.03.16 |
02 Merge (0) | 2021.03.16 |
01 Introduction to Reactive Programming (5) | 2021.03.02 |