💻 프로그래밍

[RxJava] #5 Operators(3) 필터링, 결합 연산자

콩드로이드 2022. 8. 22. 10:51

안녕하세요

Observable에서 발행되는 아이템들을 필터링 및 결합하는 연산자에 대해 알아보겠습니다 


필터링 연산자

 

💡 debounce

• 아이템이 발행되고 🕒 동안 다른 아이템이 발행되지 않을 때, 마지막 아이템을 발행

 

💡 throttleFirst

• 일정 시간마다 첫번째 이벤트만 가져옴 

첫번째 이벤트를 가져오고 나면 🕒 내의 다른이벤트는 무시

 

 

💡 throttleLast / sample

• 일정 시간마다 가장 최근 이벤트만 가져옴 

 

📌 debounce, throttleFirst, throttleLast는 UI 컨트롤에 유용

ex)브랜디 랩스 (유효성 검사)

 

안드로이드 이벤트 핸들링 적용하기

Overview

labs.brandi.co.kr

 


 

💡 elementAt

• 특정 인덱스에 해당하는 아이템을 필터링

 

💡 filter

• 조건식이 true일때만 아이템 발행

 

 


💡 skip(n)

• observable이 발행하는 아이템 중 n개의 아이템을 무시하고, 그 이후부터 발행

 

💡 take(n)

• observable이 발행하는 아이템 중 처음부터 n개까지만 발행, 그 이후는 모두 무시 (skip과 반대)

 

 


💡 amb

• 여러 개의 Observable을 동시에 구독하는데, 그 중 가장 먼저 발행되는 Observable 선택 시 사용

    val arr = ArrayList<Observable<String>>()

    arr.add(Observable.just("A","B","C").delay(1, TimeUnit.SECONDS))
    arr.add(Observable.just("가","나","다"))
    arr.add(Observable.just("あ","い","う").delay(3000, TimeUnit.MILLISECONDS))

    Observable.amb(arr).subscribe {
        print(it)
    }
    
    //가나다 출력

 

 


결합 연산자

여러 Observable을 결합해 하나의 Observable로 만들어봅시다 

여러 개의 Observable 결과를 한번에 처리할 때 유용합니다

 

💡 combineLast

• 여러 Observable 중 가장 최근에 발행한 아이템들을 결합해 하나로 발행 (최신값으로 갱신)

 


 

💡 zip

• 여러 Observable들을 발행한 순서에 맞춰 결합해 하나로 발행

 


 

💡 merge

• 여러 Observable을 하나의 스트림에 결합

   val odds = Observable.just(1, 3, 5)
   val evens = Observable.just(2, 4, 6)

   Observable.merge(odds, evens)
            .subscribe({
                    println("Next: $it")
            },
            {
                   println("Error: " + error.message)
                
            })