说,我想在RxJava中创建一个Observable
,它有一个反馈耦合,如下图所示。
我设法通过使用主题实现了这一目标,如下:
// Observable<Integer> source = Observable.range(0, 6);
public Observable<Integer> getFeedbackSum(Observable<Integer> source) {
UnicastSubject<Integer> feedback = UnicastSubject.create();
Observable<Integer> feedbackSum = Observable.zip(source, feedback.startWith(0), Pair::create)
.map(pair -> pair.first + pair.second);
feedbackSum.subscribe(feedback);
return feedbackSum;
}
看起来很丑陋。还有更好的方法吗?
答案 0 :(得分:2)
有一个运算符:scan
:
public final <R> Observable<R> scan(R initialValue, BiFunction<R,? super T,R> accumulator)
Observable.range(0, 6)
.scan(0, (a, b) -> a + b)
.test()
.assertResut(0, 1, 3, 6, 10, 15, 21);
如果您的累加器类型不是不可变的,您可以使用scanWith
:
public final <R> Observable<R> scanWith(Callable<R> seedSupplier, BiFunction<R,? super T,R> accumulator)