Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
[RxKotlin] 두개의 리스트를 비교시 - Combinlatest 사용 본문
Combinelatest
두개의 리스트를 비교하는 걸 구현한다고 가정했을때 여러 가지 방법이 있을테지만
그중에 conbinelatest 를 사용해서 리스트와 각각의 값을 비교하는 방법으로 진행해보자.
다이어그램은 다음과 같다.
val observable1 = Observable.fromArray("A" , "B" , "C" , "D")
val observable2 = Observable.fromArray("E" , "C" , "B" , "G","F")
Observables.combineLatest( observable1.toList().toObservable() , observable2 ){ list , value ->
println("$list <> $value")
if(list.contains(value)) value else ""
}
.filter { !it.isEmpty() }
.subscribeBy(
onNext = {
println("value -> $it")
}
)
====================
[A, B, C, D] <> E
[A, B, C, D] <> C
value -> C
[A, B, C, D] <> B
value -> B
[A, B, C, D] <> G
[A, B, C, D] <> F
우선 zip 과 combinelatest 성격은 합쳐주는데 있지만 조합하는 게 좀 다르다.
우선 zip을 보자,
순서대로 묶여서 나오는걸 볼 수 있다.
val observable1= Observable.interval(100 , TimeUnit.MILLISECONDS)
val observable2 = Observable.interval( 250 , TimeUnit.MILLISECONDS)
Observable.zip(observable1 , observable2 , BiFunction{ t1 : Long , t2 : Long ->
"t1 : $t1 , t2 : $t2"
}).subscribe{
println("값 -> $it")
}
Thread.sleep(1000)
=======================
값 -> t1 : 0 , t2 : 0
값 -> t1 : 1 , t2 : 1
값 -> t1 : 2 , t2 : 2
값 -> t1 : 3 , t2 : 3
그럼 combinelatest를 보자.
val observable1= Observable.interval(100 , TimeUnit.MILLISECONDS)
val observable2 = Observable.interval( 250 , TimeUnit.MILLISECONDS)
Observable.combineLatest(observable1 , observable2 , BiFunction{ t1 : Long , t2 : Long ->
"t1 : $t1 , t2 : $t2"
}).subscribe{
println("값 -> $it")
}
Thread.sleep(1000)
======================
값 -> t1 : 1 , t2 : 0
값 -> t1 : 2 , t2 : 0 <- 먼저 나온것과 이전 나온것을 묶여서 보여주는 걸 볼 수 있다.
값 -> t1 : 3 , t2 : 0
값 -> t1 : 4 , t2 : 0
값 -> t1 : 4 , t2 : 1
값 -> t1 : 5 , t2 : 1
값 -> t1 : 6 , t2 : 1
값 -> t1 : 6 , t2 : 2
값 -> t1 : 7 , t2 : 2
값 -> t1 : 8 , t2 : 2
'스터디 > RxJava2' 카테고리의 다른 글
[RxKotlin] Collection 함수 기본 알아보기 (0) | 2018.02.01 |
---|---|
[RxKotlin] 예제로 배워보는 그룹핑 방법 (0) | 2018.01.24 |
[RxKotlin] Lift 연산자에 대해서 알아보자 (0) | 2018.01.22 |
RxKotlin Using 사용해보자 (0) | 2018.01.19 |
RxKotlin 정리 (0) | 2017.11.06 |