RxJava:拉链替代品

时间:2017-10-13 11:41:23

标签: android rx-java2

我有4个函数返回Observable of String

            Observable<String> id() {
                return Observable.just("1");
            }

            Observable<String> name() {
                return Observable.just("X");
            }

            Observable<String> place() {
                return Observable.just("Place1");
            }

            Observable<String> code() {
                return Observable.just("A100s");
            }

我有一个对象,比如MyObject,需要创建这4个属性。

             MyObject m = new MyObject(id,name,place,code);

我还有一个方法,它将MyObject作为输入并返回其他一些Observalbe,如下所示

            Observable<String> finalResult(MyObject myObject) {
                    return Observable.just("Final result");
                }

致电finalResult我必须通过调用前4种方法创建MyObject,然后将MyObject传递给finalResult

由于所有前4个方法都是异步的,我使用zip来获取所有4个值

             Observable.zip(id(), name(), place(), code(), new Function4<String, String, String, String, MyObject>() {
                        @Override
                        public MyObject apply(@NonNull String id, @NonNull String name, @NonNull String place, @NonNull String code) throws Exception {
                            MyObject m = new MyObject(id, name, place, code);
                            return m;
                        }
                    }).flatMap(new Function<MyObject, ObservableSource<String>>() {
                        @Override
                        public ObservableSource<String> apply(@NonNull MyObject myObject) throws Exception {
                            return result(myObject);
                        }
                    });

对于这类场景,zip是否有其他方法可以减少代码长度?

我看到了blockingGet,但我觉得这不是一个好用的。有没有简单的方法呢?

0 个答案:

没有答案