combineLatest组合可观察量之间的依赖关系

时间:2018-01-29 18:39:30

标签: rx-java rx-java2 combinelatest

我有一个看似简单的用例,在屏幕上我显示基于排序的数据和pageIndex,两者都通过UI进行更改。所以解决方案很容易

Observable
    .combineLatest(sortObservable, pageIndexObservable, Pair::of)
    .switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))

但是,当排序更改时,pageIndex应重置为0.

如果我这样做

Observable
    .combineLatest(
         sortObservable.doOnNext(__ -> pageIndexObservable.onNext(0),
         pageIndexObservable, Pair::of)
    .switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))

然后它发出(最后一个排序,0)然后立即(新排序,0),id显然只想得到它(新排序,0),或者以某种方式忽略它(最后排序,0) ,即有条件地阻止pageIndexObservable发光。

我不想使用withLatestFrom,因为我希望pageIndexObservable发出以触发getData

由于

1 个答案:

答案 0 :(得分:0)

您可以使用BehaviorSubject<Pair>和两个更新规则:

BehaviorSubject<Pair> query = BehaviorSubject.createDefault(Pair.of(0, 0));

query
.switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))
.subscribe(/* ... */);

// ---------------------------------------

void changeSorting(int sort) {
    Pair current = query.getValue();
    query.onNext(Pair.of(sort, 0));
}

void nextPage() {
    Pair current = query.getValue();
    query.onNext(Pair.of(current.sort, current.pageIndex + 1));
}