이번 글에서는 Observable이 전달하는 데이터를 조건에 맞게 거르는 Operator에 대해 이야기 합니다. Operator는 아래와 같이 있습니다.

debound(throttleWithTimeout)

아이템이 생성되고 일정시간 동안 다른 아이템이 생성되지 않으면 데이터를 전달하는 operator 입니다. throttleWithTimeout과 동일한 동작을 합니다.

노란색이 생성되고 일정시간이 지나기 전에 초록색이 생성되어서 노란색을 전달하지 못한 상황

노란색이 생성되고 일정시간이 지나기 전에 초록색이 생성되어서 노란색을 전달하지 못한 상황

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

    Thread.sleep(3000)
}

0.5초 보다 늦게 데이터를 만들기 때문에 전달 완료

0.5초 보다 늦게 데이터를 만들기 때문에 전달 완료

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

    Thread.sleep(3000)
}

1초 보다 빨리 데이터를 만들기 때문에 전달되지 않음

1초 보다 빨리 데이터를 만들기 때문에 전달되지 않음

distinct

distinct

이전에 전달 한 아이템은 전달하지 않게 하는 operator 입니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/61402312-774b-49cb-b99a-5f40047c8e82/Untitled.png

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

distinct가 없을 때 중복된 데이터가 전달 됨

distinct가 없을 때 중복된 데이터가 전달 됨

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

중복이 제거되어 데이터 전달 됨

중복이 제거되어 데이터 전달 됨

distinctUntilChanged

변경이 생기기 전 까지 중복 된 데이터를 전달 하지 않는 operator 입니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7eb5029d-4d08-4496-8f5c-f8f03c2dfa22/Untitled.png