Ros*_*hak 10 java android rx-java rx-java2
我很高兴能与新RxJava Sources如:Single,Maybe,Completable,,使您接口的类的"源"的创建过程更清洁,防止了很多错误(如忘记调用onComplete())
但它需要大量的样板才能将它们组合成一个复杂的流.
例如,我们有加载和缓存数据的常见Android情况.假设我们有2个来源api,并cache和我们想将其结合:
public interface Api {
Single<Integer> loadFromNetwork();
}
public interface Cache {
Maybe<Integer> loadFromCache(); //maybe because cache might not have item.
}
Run Code Online (Sandbox Code Playgroud)
让我们试着把它结合起来:
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork());
Run Code Online (Sandbox Code Playgroud)
它不会编译,因为Maybe没有重载Maybe.switchIfEmpty(Single):Single
所以我们必须转换一切:
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork().toMaybe())
.toSingle();
Run Code Online (Sandbox Code Playgroud)
组合它的另一种可能方法还需要сonversion:
final Single<Integer> result = Observable.concat(
cache.loadFromCache().toObservable(),
api.loadFromNetwork().toObservable()
).firstOrError();
Run Code Online (Sandbox Code Playgroud)
因此,我没有看到任何使用新源的方法,没有很多转换会增加代码噪声并创建大量额外的对象.
由于这样的问题,我不能使用Single,Maybe,Completable和继续使用Observable无处不在.
所以我的问题是:
什么是相结合的最佳实践Single,Maybe,
Completable.
为什么这些Source没有重载来简化梳理.
为什么这些Source没有共同的祖先并将其用作
参数switchIfEmpty和其他方法?
PS有谁知道为什么这些类没有任何共同的层次结构?
从我的角度来看,如果一些代码可以用于Completable它的例子,它也可以正常使用Single和Maybe?
2017年9月22日发布的RxJava 2.1.4增加了所需的重载Maybe.switchIfEmpty(Single):Single。
因此,当我们想要组合以下类时:
public interface Api {
Single<Integer> loadFromNetwork();
}
public interface Cache {
Maybe<Integer> loadFromCache(); //maybe because cache might not have item.
}
Run Code Online (Sandbox Code Playgroud)
我们终于可以做到:
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork());
Run Code Online (Sandbox Code Playgroud)
RX团队已经通过添加额外的过载来完成的非常出色Maybe,Single,Observable,,简化结合在一起。
至于版本2.1.16,我们有以下方法相结合Maybe,Single与Completable:
也许:flatMapSingleElement(Single):Maybe,flatMapSingle(Single):Single,switchIfEmpty(Single):Maybe,flatMapCompletable(Completable):Completable
单人:flatMapMaybe(Maybe):Maybe,flatMapCompletable(Completable):Completable
Completable:andThen(Single):Single,andThen(Maybe):Maybe
| 归档时间: |
|
| 查看次数: |
7298 次 |
| 最近记录: |