假设我有一个Observable of int:obs = 1 :: 2 :: 3 :: 1 :: 3 :: 1 :: 1 :: 2
,我希望从1
开始累积系列,如下所示:
acc_obs = 1 + 2 + 3 :: 1 + 3 :: 1 :: 1 + 2
= 6 :: 4 :: 1 :: 3
。
如何通过反应式扩展来实现这一目标?
我考虑过使用obs.filter(i -> i == 1)
并将其与某种buffer(bufferClosingSelector)
一起使用,但似乎有两个问题:
bufferClosingSelector
"关闭"每次找到1
时缓冲区,我的偏移量为1,发出类似1 :: 2 + 3 + 1 :: 3 + 1 :: 1
的内容,对吗?答案 0 :(得分:0)
我用主题和窗口解决了它,但它看起来不那么好。请看一下:
@Test
public void name() throws Exception {
// 1 :: 2 :: 3 :: 1 :: 3 :: 1 :: 1 :: 2
Observable<Integer> just = Observable.fromIterable(Arrays.asList(1, 2, 3, 1, 3, 1, 1, 2)).share();
Subject<Integer> objectPublishSubject = PublishSubject.<Integer>create().toSerialized();
just.doOnNext(objectPublishSubject::onNext)
.window(() -> {
return objectPublishSubject.takeUntil(integer -> integer == 1).takeLast(1);
}).flatMap(integerObservable -> integerObservable.reduce((integer, integer2) -> {
return integer + integer2;
}).toObservable())
.test().assertResult(6, 4, 1, 3);
}