이번 글에서는 Observable이 전달하는 데이터를 조건에 맞게 거르는 Operator에 대해 이야기 합니다. Operator는 아래와 같이 있습니다.
아이템이 생성되고 일정시간 동안 다른 아이템이 생성되지 않으면 데이터를 전달하는 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초 보다 늦게 데이터를 만들기 때문에 전달 완료
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초 보다 빨리 데이터를 만들기 때문에 전달되지 않음
이전에 전달 한 아이템은 전달하지 않게 하는 operator 입니다.
fun main() {
val observable = Observable.just(1, 1, 2, 1, 2, 3)
observable.subscribe({
// onNext로 전달 된 데이터 출력
println(it)
}, {
// 에러 처리
it.printStackTrace()
}, {
// 완료 이벤트
println("onComplete")
})
}
distinct가 없을 때 중복된 데이터가 전달 됨
fun main() {
val observable = Observable.just(1, 1, 2, 1, 2, 3)
.distinct() // 추가
observable.subscribe({
// onNext로 전달 된 데이터 출력
println(it)
}, {
// 에러 처리
it.printStackTrace()
}, {
// 완료 이벤트
println("onComplete")
})
}
중복이 제거되어 데이터 전달 됨
변경이 생기기 전 까지 중복 된 데이터를 전달 하지 않는 operator 입니다.