RxJava2

Published: by

Single에서 FlatMap

사례

Retrofit으로 네트워킹 한 다음 응답값을 하나의 객체로 받았다. 객체 안의 리스트 데이터를 subscribe에서 받으려 한다. 그리고 리스트 데이터 중 전화번호가 없는 것은 걸러내야 한다. 먼저 FlatMap을 사용해야 한다. Single에서는 FlatMap을 바로 사용할 수 없다. 때문에 flattenAsObservable을 사용했고, flatMap이후 filter를 거쳐 toList로 뽑아내면 된다.

코드

network.getResult(this.query, page)
        .subscribeOn(Schedulers.io())
        .flattenAsObservable(dResult -> {
          return dResult.getDocuments();
        })
        .flatMap(documents -> Observable.just(documents))
        .filter(documents -> !TextUtils.isEmpty(documents.getPhone()))
        .toList()
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(items -> {
        }));

Debug

디버깅 플러그인이다.

Frodo2

Example

예제가 있다.

RxJavaExample

Maybe

Maybe는 RxJava2에 처음 도입된 Observable의 또 다른 특수 형태로, Single과 마찬가지로 최대 데이터 하나를 가질 수 있지만 데이터 발행 없이 바로 데이터 발행을 완료할 수도 있다. (Single은 1개 완료, Maybe는 0 혹은 1개 완료) 즉, Maybe는 Single에 onComplete 이벤트가 추가된 형태이다.

데이터 발행자와 수신자

데이터 발행자 데이터 수신자
Observable
Single
Maybe
Subject
Completable
구독자(Subscriber)
옵저버(Observer)
소비자(Consumer)

리액티브 연산자 분류

연산자 설명
생성(Create) 연산자 Observable, Single 등으로 데이터의 흐름을 만들어내는 함수
create(), just(), fromArray() 등
변환(Transforming) 연산자 어떤 입력을 받아서 원하는 출력 결과를 내는 함수
map(), flatMap() 등
필터(Filter) 연산자 입력 데이터 중에 원하는 데이터만 걸러낸다
filter(), first(), take() 등
합성(Combining) 연산자 여러 Observable을 조합하는 역할
오류 처리(Error Handling) 연산자 onErrorReturn(), onErrorResumeNext(), retry() 등
유틸리티(Utility) 연산자 주요 연산자로는 subscribeOn(), observeOn() 등
비동기 지원

모든 함수형 연산의 기본이 되는 함수

map()

@CheckReturnValue // 반환값
@SchedulerSupport(value="none") // 스케줄러를 지원하지 않음, 현재 스레드에서 실행
public final <R> Observable(R> map(Function<? super T,? extends R> mapper)

인자

Function<? super T, ? extends R> mapper

flatMap()

map()과 다르게 결과값이 Observable(여러개)일 수 있다.

public final <R> Observable<R> flatMap(Func1<? super T,? extends Observable<? extends R>> func)
public final <R> Observable<R> flatMap(Func1<? super T,? extends Observable<? extends R>> func, int maxConcurrent)

인자

Func1<? super T,? extends Observable<? extends R>> func

filter()

reduce()

RxJava의 제네릭 함수형 인터페이스

인터페이스 이름 포함 메서드 설명
Predicate boolean test(T t) t 값을 받아서 참이나 거짓을 반환
Consumer void accept(T t) t 값을 받아서 처리
Function<T, R> R apply(T t) t 값을 받아서 결과를 반환