gpt4 book ai didi

rx-java - RxJava combineLatest() 如何知道哪个 observable 发出了一个值?

转载 作者:行者123 更新时间:2023-12-04 08:45:15 26 4
gpt4 key购买 nike

我有一个代码

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

如何知道哪个 observable 被改变了?

最佳答案

这可能是应用 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) });

关于rx-java - RxJava combineLatest() 如何知道哪个 observable 发出了一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48380223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com