首页 文章

rxJava combineLatest()如何知道哪个observable发出了一个值?

提问于
浏览
3

我有一个代码

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);
    });
    ...

如何知道哪个观察结果发生了变化?

1 回答

  • 0

    这可能是一种容易出错的方式来应用RxJava .

    假设我们想要释放图书管理员库,然后是法庭律师,没有办法避免一些中间状态 .

    Department + Person    => Pair
    Library    + Librarian => library-librarian
    Court      + Librarian => court-librarian   // wrong!
    Court      + Lawyer    => court-lawyer
    

    解决方案取决于您的数据是如何提供给您的 . 如果每个Observable是独立的,并且每个的一个索引对应于另一个的相同索引,则应使用 zip 而不是 combineLatest .

    或者,如果从Person中检索部门(反之亦然),则它是可以更改的流

    personObservable.switchMap(person -> person.department()
        .map(department -> new Pair<>(person, department))
      .switchMap({ pair -> repository.loadHourlyTable(pair.first , pair.second) });
    

相关问题