使用RxJava创建自定义Observable的正确方法[种类]?

时间:2015-09-13 19:46:22

标签: java rx-java rx-android

我正在处理我的自定义Observables,试图让它们在我的代码中更加可重用,并想知道最好的[正确]方法。

我正在做的只是实施Observable.OnSubscribe<>界面并使用call()方法。

基本上,我想订阅另一个Observable并根据其结果有条件地发出一个或其他数据。在上述Observable方法中订阅另一个call()是不好的做法吗?至少对我来说似乎很笨拙。或者我应该以不同的方式使用Rx运算符(我仍然)不知道?

注意:我没有使用Java8和Retrolambda,所以请不要在任何可能的答案上使用lambdas。

1 个答案:

答案 0 :(得分:3)

创建自定义Observables的范围从棘手到困难,我不建议将其作为第一步。您的方案可以通过flatMap解决:

source.flatMap(new Func1<Integer, Observable<Integer>>() {
    @Override
    public Observable<Integer> call(Integer value) {
        if (value < 5) {
            return Observable.empty();
        }
        return Observable.just(value * 2);
    }
});
  

在上述call()方法中订阅另一个Observable是不好的做法吗?

不,但你必须通过Subscriber包裹传入的Subscribers.wrap()来避免所谓的多个onStart调用。