2

RxAndroidのストリームですでに処理されている要素の数を数える方法はありますか?rxのライブカウントされた要素

私はそのような何か持っています:

Observable.fromArray(new String[]{"these", "are", "my", "values", "."}) 
      .map(s -> doSomeCoolStuff(s)) 
      // ... 
      .subscribe(amountOfProcessedItems -> Log.d("test", "" + amountOfProcessedItems)); 

をそして、私の出力が既に放出されたアイテムの量をカウントし、基本的には各項目の後、1 2 3 4 5次のようになりますように、私は何かを探しています。

AtomicInteger counter = new AtomicInteger(); 
Observable.fromArray(new String[]{"these", "are", "my", "values", "."}) 
     .map(s -> doSomeCoolStuff(s)) 
     // ... 
     .subscribe(dummy -> Log.d("test", "" + counter.incrementAndGet())); 

編集:

+0

:あなただけ増加整数に要素を変換したい場合は、ここではどのようですあなたが求めるものをやりなさい。あなたの 'map'呼び出しを置き換えてください。 – Enigmativity

+0

FYI: 'mapWithIndex'はRxJavaの一部ではありません:https://github.com/davidmoten/rxjava-extrasにあります – gnuf

答えて

8

だけの要素を数える私は、具体的に `mapWithIndex`方法があることを理解

sourceOservable 
.zipWith(Observable.range(0, Integer.MAX_VALUE), (any, counter) -> counter) 
.whatever(...) 
+0

:Dこれは簡単でした。しかし、私は実際にこれを整数のストリームに変換し、購読してからカウントしない方がよいでしょう。それはまったく可能ですか? – Maximosaic

+0

[Observable.reduce()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#reduce(rx.functions.Func2))をご覧ください – Uli

+0

@Maximosaic私は編集を追加しました –

関連する問題