どうすればいいですか?私は次のように思いついた、それは私はyのxのxを計算することができますが、私は同様にyを計算するために改善することができますか?RxJava - yのxを持つカウンタ
Observable<LoadedPhoneContact> phoneContacts = getPhoneContacts()
.flatMapObservable(contacts -> Observable.fromIterable(contacts));
Observable<Integer> phoneContactsCounter = phoneContacts
.cache()
.map(contact -> 1)
.reduce((c1, c2) -> c2 + c2)
.toObservable();
mSimils = phoneContacts
.zipWith(phoneContactsCounter, (contact, index) -> new Pair<>(contact, index))
.doOnNext(data -> {
L.d("x/y = %d/%d", data.second, ?);
})
.map(data -> SimilUtil.calcSimils(data))
;
いいえ、それとも優れた代替ソリューションですか?
私は「処理Yアイテムのx」のような形式で進行状況を見ることができるようにしたい...
私は、カウントを発するが、これは正しい方法であることを第三の観察可能とジップができ?これは簡単に(あなたが最初の場所でのRxを使用することによって回避している)スレッドの同期の問題を引き起こす可能性がありますように私は間違いなく、受信コールバック内部の副作用を持っていないお勧めします
Observable<?> result = Observable.defer(() -> {
int[] counter = { 1 };
return getPhoneContacts()
.toObservable()
.flatMapIterable(list -> list, (list, element) -> {
L.d("x/y = %d/%d", counter[0]++, list.size());
return SimilUtil.calcSimils(element);
});
});
これは機能します。実際に私はいつもストリームの流れの外にある変数を持っていないと思ったので、別の方法を見つけようとしたのです。 – prom85
その理由は、defer()を使用して、ジッパー。 – akarnokd
私はそれが延期の理由であることに気がつきました。ありがとう – prom85