2016-08-08 6 views
0

私はこの観測を持っている:このRxJava observableを200ミリ秒ごとに出力するにはどうすればよいですか?

私はそれを変換するか、または onNextが呼び出しの間で200ミリと呼ばれているように、どのようなオペレータ、私はそれまで連鎖しない方法
Observable<String> concatenatedSets = 
      Observable.just("1/5/8", "1/9/11/58/16/", "9/15/56/49/21"); 

    concatenatedSets.flatMap(s -> Observable.from(s.split("/"))) 
      .map(s -> Integer.valueOf(s)) 
      .subscribeOn(Schedulers.computation()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(i -> tvCounter.setText(String.valueOf(i))); 

私はこのSO質問を見ていた: Pause between call onNext in RxJava

が、そこに答えがjustを使用して(ただし、私は別の方法で私に観察を作成していますので、

Observable.interval(100, TimeUnit.MILLISECONDS) 

ようintervalを使用して、ポーズの作成を開始します)、どのようにして両方の機能(justinterval)を混合するか、排出量の間に200ミリ秒の休止を達成するために私は何をしますか?

PS:ちょうどdelayを試してみました。私が提供した時間までに全体の実行を1回延期しました。 zipが答えかもしれないが、それは非常に混乱している。だから私は観察可能なものと区間1をどのように詰めるのだろうか?

+0

遅延演算子を試しましたか?またはこれはhttp://stackoverflow.com/questions/33291245/rxjava-delay-for-each-item-of-list-emitted –

+0

ちょうど '遅延'を試みた - それは私が提供した時間まで一度全体的な実行を延期した。 'zip'は答えかもしれないが、それは非常に混乱しているので、私はどのように私の観測可能なと区間1を圧縮するのですか? –

+0

最初にカスタム演算子を見てください。それに気づかなかった:) https://gist.github.com/matir91/aac2c1318a1a1facd811 –

答えて

2
Observable<Integer> observable = Observable.just("1/5/8", "1/9/11/58/16/", "9/15/56/49/21") 
       .flatMap(s -> Observable.from(s.split("/"))) 
       .map(s -> Integer.valueOf(s)); 

Observable<Integer> zippedObservable = Observable.zip(
       observable, 
       Observable.interval(100, TimeUnit.MILLISECONDS), 
       (number, interval) -> number); 

zippedObservable 
     .subscribeOn(Schedulers.computation()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(i -> tvCounter.setText(String.valueOf(i))); 
+0

ありがとうございました! '.zip'の関数引数は何をしますか? –

+1

この関数はObservablesとObservableの両方から2つの項目を取り、Observableによってzipによってエミュレートされる項目を1つ返します。 ドキュメントは次のとおりです。http://reactivex.io/RxJava/javadoc/rx/Observable.html#zip(rx.Observable,%20rx.Observable,%20rx.functions.Func2) – nshmura

関連する問題