본문 바로가기
2023년 이전/ReativeX

RxJava,RxKotlin - flatMap()

by JeongUPark 2019. 11. 13.
반응형

[출처 - RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에]

본 글은 'RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에' 를 학습하면서 정리한 글입니다

 

마블다이어그램참고 - http://reactivex.io/RxJava/javadoc/io/reactivex/Flowable.html#flatMap-io.reactivex.functions.Function-

 

flatMap은 Map을 발전시킨 함수입니다. Map이 일대일 함수라면, flatMap은 일대다 혹은 일대일 Observable 함수입니다. 일대일 Observable 함수의미는 flatMap 함수에 똑같은 함수를 넣더라도 결과가 Observable이 나온다는 뜻입니다.

 

마블다이어그램을 보면

빨간 동그라미를 넣어더니 마름모가 빨간 마름모가 2개가 나왔습니다. 즉 flatMap은 결과 값이 Observable이므로 여러 개의 데이터를 발행할 수 있습니다.

 

Code를 보겠습니다.

JAVA

import io.reactivex.Observable;
import io.reactivex.functions.Function;

public class flatMap_test {

    public static void main(String[] arg) {
        Function<String, Observable<String>> getDiamond = new Function<String, Observable<String>>() {
            @Override
            public Observable<String> apply(String num) throws Exception {
                return Observable.just(num+"<>", num+"<>");
            }
        };
        String[] numbers = {"1","2","3","4"};
        Observable<String> observable = Observable.fromArray(numbers).flatMap(getDiamond);
        observable.subscribe(System.out::println);
    }
}

Kotlin

import io.reactivex.Observable
import io.reactivex.functions.Function

fun main(){
    val getDiamond = Function<String, Observable<String>> { num -> Observable.just("$num<>", "$num<>") }
    val numbers = arrayOf("1", "2", "3", "4")
    val observable = Observable.fromArray(*numbers).flatMap(getDiamond)
    observable.subscribe(System.out::println)

}

이렇게 Observable을 반환함해서 그 결과 값을 subscribe 해서  결과 값으로

을 확인할 수 있습니다. 

그리고 위의 Java code를 더 간략하게 바꿀 수 있습니다.

import io.reactivex.Observable;

public class flatMap_test {

    public static void main(String[] arg) {
        String[] numbers = {"1","2","3","4"};
        Observable<String> observable = Observable.fromArray(numbers).flatMap(num->Observable.just(num+"<>",num+"<>"));
        observable.subscribe(System.out::println);
    }
}

 위의 code 처럼 Function을 빼고 람담표현식으로 변경할 수 있습니다.

반응형