본문 바로가기
2023년 이전/ReativeX

RxJava, RxKotlin - timeinterval 함수

by JeongUPark 2020. 1. 20.
반응형

[출처 - RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에]

본 글은 'RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에' 를 학습하면서 정리한 글입니다

 

마블다이어그램 참고 - http://reactivex.io/RxJava/javadoc/io/reactivex/Flowable.html#timeInterval--



timeinterval 함수는 어떤 값을 발행했을 때 이전 값을 발행한 이 후 얼마나 시간이 흘렀는 지를 알려줍니다.

 

 

testcode를 통해 확인해 보겠습니다. (CommonUtils와 CommonUtilsk의 내용은 여기에서 확인 할 수 있습니다.)

Java

import io.reactivex.Observable;

public class timeinterval_test {

    public static void main(String[] args){
        String[] data = {"1","3","5"};

        CommonUtils.exampleStart();
        Observable source = Observable.fromArray(data)
                .delay(item->{
                    CommonUtils.doSomething();
                    return Observable.just(item);
                }).timeInterval();
        source.subscribe(it->{
            long time = System.currentTimeMillis() - CommonUtils.startTime;
            System.out.println(CommonUtils.getThreadName() + " | " + time + " | " + "value = " + it);
        });
        CommonUtils.sleep(1000);
    }
}

Kotlin

import io.reactivex.Observable
import io.reactivex.rxkotlin.toObservable

fun main(){
    CommonUtilsk.exampleStart()
    val data = arrayOf("1","3","5")
    val source = data.toObservable()
        .delay { item->
            CommonUtilsk.doSomething()
            return@delay Observable.just(item)
        }.timeInterval()
    source.subscribe { it->
        val time = System.currentTimeMillis() - CommonUtilsk.startTime
        println(CommonUtilsk.getThreadName() + " | " + time + " | " + "value = " + it)
    }
    CommonUtilsk.sleep(1000)
}

결과

main | 229 | value = Timed[time=10, unit=MILLISECONDS, value=1]
main | 253 | value = Timed[time=24, unit=MILLISECONDS, value=3]
main | 315 | value = Timed[time=62, unit=MILLISECONDS, value=5]

 

위의 결과를 보면 이전 발행부터 현재 발행까지의 걸린 시간을 time과 unit으로 확인 할 수 있고 value도 확인 할 수 있습니다.

 

이렇게 나오는 이유는 timeinterval 함수의 원형을 보면 

    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final Observable<Timed<T>> timeInterval() {
        return timeInterval(TimeUnit.MILLISECONDS, Schedulers.computation());
    }

Observale<Timed<T>>를 Timed 객체를 가지는 Observable을 반환 하고 있습니다. 그리고 Timed 객체를 보면

final T value;
final long time;
final TimeUnit unit;

이렇게 3개의 변수를 가지고 있어 위의 결과 처럼 시간값과 단위 그리고 결과가 나오는 것입니다.

반응형

'2023년 이전 > ReativeX' 카테고리의 다른 글

RxJava,RxKoltin - 스케줄러(2)  (0) 2020.01.27
RxJava, RxKotlin - 스케쥴러(1)  (0) 2020.01.21
RxJava,RxKotlin - delay() 함수  (0) 2020.01.20
RxJava - 수학관련 함수  (0) 2020.01.20
RxJava,RxKotlin - 기타 함수  (0) 2020.01.19