이번 글에서는 Observable이 전달하는 데이터를 변형하는 Operator에 대해 이야기 합니다.

데이터를 변형하는 Operator는 아래와 같이 있습니다.

buffer

데이터를 바로 전달하지 않고 buffer size만큼 모일 때 까지 기다렸다가 한번에 List형태로 전달하는 operator 입니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4fb39c35-4d4f-4378-93c2-c37eceaf856d/Untitled.png

fun main() {
    val observable = Observable.interval(1000, TimeUnit.MILLISECONDS)
        .buffer(2)
    observable.subscribe({
        // onNext로 전달 된 데이터 출력
        println(it)
    }, {
        // 에러 처리
        it.printStackTrace()
    }, {
        // 완료 이벤트
        println("onComplete")
    })

    Thread.sleep(10000)
}

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8d00efc8-66dc-4852-bfbb-1e0157156181/Untitled.png

flatMap

Observable에서 데이터를 받아 새로운 Observable을 만드는 operator 입니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bd86f85e-30e0-4d72-8739-8af4cf43fb59/Untitled.png

fun main() {
    val observable = Observable.just(1, 2, 3)
        .flatMap { Observable.just("$it Hello", "$it World") }
    observable.subscribe({
        // onNext로 전달 된 데이터 출력
        println(it)
    }, {
        // 에러 처리
        it.printStackTrace()
    }, {
        // 완료 이벤트
        println("onComplete")
    })
}

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f9852be0-5b23-4e88-bfb8-2ef99d9e6c2c/Untitled.png

groupBy

특정 규칙에 따라 데이터를 그룹화 시켜서 새로운 Observable을 만드는 operator입니다. Observable<GroupedObservable<K, T>>를 리턴 합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a49b0fb2-cc7a-432a-a79e-b8b1dcda54b0/Untitled.png

fun main() {
    val observable = Observable.fromIterable(0..9)
        .groupBy { it % 3 }
    observable.subscribe({
        // onNext로 전달 된 데이터 출력
        println("key: ${it.key} $it")
    }, {
        // 에러 처리
        it.printStackTrace()
    }, {
        // 완료 이벤트
        println("onComplete")
    })
}

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3b5d09f7-745e-4f25-96b9-1eced57bdb32/Untitled.png

map

데이터를 특정 규칙에 따라 변환하는 operator 입니다.