我有一个代码
Observable.combineLatest(leftObservable, rightObservable, Pair::new)
.switchMap(pair -> {
final Department department = pair.first;
final Person person = pair.second;
if(/*person has changed*/){
// do something
}
return repository.loadHourlyTable(department , person);
});
...
如何知道哪个观察者被改变了?
答案 0 :(得分:0)
这可能是应用RxJava的容易出错的方式。
假设我们要先发布图书馆馆员然后是法庭律师,这是无法避免的中间状态。
Department + Person => Pair
Library + Librarian => library-librarian
Court + Librarian => court-librarian // wrong!
Court + Lawyer => court-lawyer
解决方案取决于您如何将数据提供给您。如果每个Observable都是独立的,并且一个索引的每个索引对应另一个索引,则应使用zip
而不是combineLatest
。
或者,如果您从“人员”中检索部门(反之亦然),则该部门可以更改
personObservable.switchMap(person -> person.department()
.map(department -> new Pair<>(person, department))
.switchMap({ pair -> repository.loadHourlyTable(pair.first , pair.second) });