세상을 바꾸는 개발자

[RxJava] 다양한 Observable의 형태 ( Maybe ) 본문

안드로이드/RxJava

[RxJava] 다양한 Observable의 형태 ( Maybe )

헬창코딩 2021. 8. 24. 23:55

안녕하세요 헬창코딩입니다.

이번에는 Maybe에 대해서 알아보도록 하겠습니다. 

 

Maybe는 Single과는 비슷하지만 아이템을 발행하거나 발행하지 않을 수도 있다는 점에서 차이가 있습니다. 

아이템을 발행할 때는 onSuccess(T)를 호출하고, 발행하지 않을 때는 onComplete()를 호출합니다.

그러므로 onSuccess()를 호출하는 경우 onComplete()를 호출할 필요는 없습니다.

 

       Maybe.create(emitter -> {
            emitter.onSuccess(100);
            emitter.onComplete();   //무시된다
        })
                .doOnSuccess(item -> Log.d("log_test", "doOnSuccess::" + item))
                .doOnComplete(() -> Log.d("log_test", "Complete"))
                .subscribe(t -> Log.d("log_test", "" + t));

        Maybe.create(emitter -> emitter.onComplete())
                .doOnSuccess(item -> Log.d("log_test", "doOnSuccess::" + item))
                .doOnComplete(() -> Log.d("log_test", "Complete_2"))
                .subscribe(t -> Log.d("log_test", "" + t));

 

결과

 

그리고 몇 가지 Observable 연산자는 반환 타입을 Maybe로 변환합니다.

        Observable<Integer> data1 = Observable.just(1, 2, 3);
        Maybe<Integer> maybe1 = data1.firstElement();
        maybe1.subscribe(t -> Log.d("log_test", "" + t));


        Observable<Integer> data2 = Observable.empty();
        Maybe<Integer> maybe2 = data2.firstElement();
        maybe2.subscribe(t -> Log.d("log_test", ""), throwable -> {
        }, () -> Log.d("log_test", "onComplete"));

 

결과

Comments