728x90
리액티브 오퍼레이션 종류
- 생성 오퍼레이션
- 조합 오퍼레이션
- 변환 오퍼레이션
- 로직 오퍼레이션
Flux와 Mono가 제공하는 오퍼레이션을 통하여 데이터를 전달하는 파이프 라인을 생성함
생성 오퍼레이션
//하나 이상의 객체 데이터 생성
Flux<Integer> numberFlux = Flux.just(1,2,3,4,5);
numberFlux.subscribe(System.out::println);
//list 데이터 Flux
List<String> fruits = List.of("사과", "딸기", "배");
Flux<String> flux = Flux.fromIterable(fruits);
flux.subscribe(System.out::println);
- just() : 하나 이상의 객체 데이터 생성
- fromArray() : 배열 생성
- fromIterable() : 리스트 생성
- fromStream() : Stream 생성
- range() : int 범위 지정해서 순차적으로 생성
조합 오퍼레이션
//두 개의 Flux요소가 하나의 Flux로 변경
Flux<Integer> start = Flux.range(1,5);
Flux<Integer> end = Flux.range(6, 10);
Flux<Integer> flux = Flux.zip(start, end, Math::addExact);
flux.subscribe(System.out::println);
- mergeWith() : 두 개이상의 리액티브 타입을 결합
- zip() : 정적인 생성 오퍼레이션, 기본생성으로는 Tuple2형태로 결합, 원하는 객체로 결합 가능
변환 오퍼레이션
//1은 skip
Flux.range(1,5)
.skip(1)
.subscribe(System.out::println);
//1, 2, 3만 출력
Flux.range(1,5)
.take(3)
.subscribe(System.out::println);
//5는 제외 1, 2, 3, 4만 출력
Flux.range(1,5)
.filter(number -> number != 5)
.subscribe(System.out::println);
//1, 2로 출력
Flux.just(1, 1, 1, 1, 2)
.distinct()
.subscribe(System.out::println);
//정수형으로 변환
Flux.just("1", "5")
.map(Integer::parseInt)
.subscribe(System.out::println);
- skip() : 지정된 수를 건너뛴 후 전달하거나 지정된 시간이 경과할 경우 전달
- take() : 처음 지정된 수의 값만 전달하고 구독 취소
- filter() : 지정된 조건식 필터링 처리함
- distinct() : 중복 필터링
- map() : 새로운 타입으로 변환 발행
- flatMap() : 오퍼레이션 수행 도중 생성되는 임시 Flux or Mono를 사용하여 변환을 수행, 비동기 변환이 가능함
로직 오퍼레이션
//모두 같지 않아서 false
Flux.just("넥슨", "NC", "넷마블")
.all(company -> company.equals("넥슨"))
.subscribe(System.out::println);
//하나만 같아서 true
Flux.just("넥슨", "NC", "넷마블")
.any(company -> company.equals("넥슨"))
.subscribe(System.out::println);
- all() : 모든 것이 조건을 충족하는 지 확인
- any() : 최소 하나가 조건을 충족하는지 확인
'SPRING' 카테고리의 다른 글
[SPRING] JPA 고아객체 (0) | 2022.06.06 |
---|---|
[SPRING] JPA 영속성 전이 (0) | 2022.06.06 |
[SPRING] JPA 쿼리메소드 요약 (0) | 2022.04.19 |
[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory) (0) | 2022.03.02 |
[SPRING] Transaction Propagation (0) | 2021.09.22 |