RxJava:创建一个自我依赖的流

时间:2017-07-27 19:39:56

标签: rx-java rx-java2

说,我想在RxJava中创建一个Observable,它有一个反馈耦合,如下图所示。

Self-dependent stream

我设法通过使用主题实现了这一目标,如下:

// 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;
}

看起来很丑陋。还有更好的方法吗?

1 个答案:

答案 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)