Java_Project Reactor

Minki CHO·2023년 1월 30일
0

CodeStates

목록 보기
35/43

Operators

상황별로 분류된 Operator 목록 리뷰

1) 새로운 Sequence를 생성Creating 하고자 할 경우
-just()
-⭐ fromStream()
-⭐ fromIterable()
-fromArray()
-range()
-interval()
-empty()
-never()
-defer()
-using()
-generate()
-⭐ create()

2) 기존 Sequence에서 변환작업Transforming이 필요한 경우
-⭐ map()
-⭐ flatMap()
-⭐ concat()
-collectList()
-collectMap()
-merge()
-⭐ zip()
-then()
-switchIfEmpty()
-and()
-when()

3) Sequence 내부의 동작을 확인Peeking 하고자 할 경우
-doOnSubscribe
-⭐doOnNext()
-doOnError()
-doOnCancel()
-doFirst()
-doOnRequest()
-doOnTerminate()
-doAfterTerminate()
-doOnEach()
-doFinally()
-⭐log()

4) Sequence에서 데이터 필터링Filtering이 필요한 경우
-⭐filter()
-ignoreElements()
-distinct()
-⭐take()
-next()
-skip()
-sample()
-single()

5) 에러를 처리Handling errors하고자 할 경우
-⭐error()
-⭐timeout()
-onErrorReturn()
-onErrorResume()
-onErrorMap()
-doFinally()
-⭐retry()

1) 새로운 Sequence를 생성creating 하고자 할 경우
-fromStream
:Java의 Stream을 입력으로 전달받아 emit하는 Operator

:ex.

import reactor.core.publisher.Flux;

import java.util.stream.Stream;

/**
 * fromStream() 기본 예제
 */
public class FromStreamExample01 {
    public static void main(String[] args) {
        Flux
            .fromStream(Stream.of(200, 300, 400, 500, 600))  // (1)
            .reduce((a, b) -> a + b)                         // (2)
            .subscribe(System.out::println);
    }
}

:결과

2000

-fromIterable()
:Java의 Iterable을 입력으로 전달받아 emti하는 Operator
:List, Map, Set 등의 컬렉션을 fromIterable()의 파라미터로 전달할 수 있음

:ex.

import com.codestates.example.operators.sample_data.SampleData;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Flux;

import java.util.List;
import java.util.stream.Stream;

/**
 * fromIterable() 기본 예제
 */
@Slf4j
public class FromIterableExample01 {
    public static void main(String[] args) {
        Flux
            .fromIterable(SampleData.coffeeList)
            .subscribe(coffee -> log.info("{} : {}", coffee.getKorName(), coffee.getPrice()));
    }
}

:결과

09:48:25.328 [main] INFO com.codestates.example.operators.create.FromIterableExample01 - 아메리카노 : 2500
09:48:25.329 [main] INFO com.codestates.example.operators.create.FromIterableExample01 - 카페라떼 : 3500
09:48:25.329 [main] INFO com.codestates.example.operators.create.FromIterableExample01 - 바닐라 라떼 : 4500
09:48:25.329 [main] INFO com.codestates.example.operators.create.FromIterableExample01 - 카라멜 마끼아또 : 5500
09:48:25.329 [main] INFO com.codestates.example.operators.create.FromIterableExample01 - 에스프레소 : 5000
profile
Developer

0개의 댓글