1. 조건 연산자
조건 연산자는 Observable의 흐름을 제어하는 역할을 합니다. 필터 연산자가 발행된 앖을 채택하느냐 기각하느냐 여부에 초점을 맞춘다면, 조건 연산자는 지금까지의 흐름을 어떻게 제어할 것인지에 초점을 맞추죠!
조건 연산자에는 다음과 같은 함수들이 있습니다.
- amb() 함수: 둘 중 어느 것이든 먼저 나오는 Observable을 채택
- takeUntil(other) 함수: other Observable에서 데이터가 발행되기 전까지만 현재 Observable을 채택
- skipUntil(other) 함수: takeUntil(other) 함수와는 반대로 other Observable에서 데이터가 발행될 때까지 현재 Observable에서 발행되는 값을 무시
- all() 함수: Observable에 입력되는 값이 모두 특정 조건에 맞을 때만 true를 발행합니다. 만약 조건이 맞지 않으면 바로 false를 발행
2. amb()
(amb는 ambiguous(모호한)라는 영어 단어의 줄임말입니다.)
여러 개의 Observable중에서 1개의 Observable을선택하는데,선택기준은가장먼저데이터를발행하는 Observable입니다.이후 나머지 Observable에서 발행하는 데이터는 모두 무시해버립니다!
그림과 같이 첫 번째 Observable이 원을 먼저 발행했기 때문에 사각형들은 모두 무시해버립니다.
3. takeUntil(other)
이 함수는 take()함수에 조건을 설정할 수 있습니다.
구체적으로 살펴보면 인자로 받은 Observable에서 어떤 값을 발행하면 현재 Observable의 데이터 발행을 중단하고 즉시완료(onComplete)합니다. 즉, take() 함수처럼 일정 개수만 값을 발행하되 완료 기준을 다룬 Observable에서 값을 발행하는지로 판단하는 것입니다.
takeUntil(팔각형 Observable)의 형태라고 보시면 됩니다.
원으로 된 Observable을 발행하다가 팔각형 Observable이 발행되면 즉시 발행을 중단하는 모습이죠.
4. skipUntil(other)
이 함수는 takeUntil() 과 정반대의 함수입니다. other Observable을 인자로 받는다는 점은 같지만 Observable에서 데이터를 발행할 때까지 기다려요!
화살표 Observable이 발행될 때까지 기다렸다가 원 Observable의 데이터를 발행하는것을 볼수 있습니다.
5. all()
이 함수는 단순한데요. 주어진 조건에 100% 맞을 때만 true 값을 발행하고 조건에 맞지 않ㄴ느 데이터가 발행되면 바로 false 값을 발행합니다!
그림과 역할이 매우 단순해서 이해가 잘 가시겠지만 "코드로는 어떻게 구현하지?" 라는 궁금증을 가질 수 있습니다.
먼저 all()의 함수 원형을 볼게요!
이렇게 생겼군요! 여기서 predicate는 filter() 함수의 인자와 동일해요. 주어진 람다 표현식이 true인지 false인지를 판정해주는거죠.
자 그럼 실행코드로 볼게요!
val source: Single<Boolean> = Observable.fromArray( arrayOf("1","2","3","4,") )
.all(it.isNotEmpty)
source.subcribe(println(it))
// result
// true
이처럼 null값이 없으므로 true가 반환 됩니다.
'gyub's 공부일기 > RxJava' 카테고리의 다른 글
[RxJava] RxJava의 핵심 스케줄러 - 2 :트램펄린 스케줄러, 싱글 스레드 스케줄러, Executor 변환 스케줄러 (0) | 2020.11.14 |
---|---|
[RxJava] RxJava의 핵심 스케줄러 - 1 :뉴 스레드 스케줄러 , 계산 스케줄러, IO 스케줄러 (0) | 2020.11.09 |
[RxJava] 결합 연산자 zip(), combineLastest(),merge(), concat() (0) | 2020.11.06 |
[RxJava] 결합 연산자 zip(), combineLastest(),merge(), concat() (0) | 2020.11.06 |
[RxJava] 변환 연산자 concatMap(), switchMap(), groupBy(), scan() (0) | 2020.10.25 |