【问题标题】:RxJava filter operatorRxJava 过滤器操作符
【发布时间】:2017-02-04 12:19:33
【问题描述】:

我是 rxJava 的新手。

好吧,我正在测试几个在 rxJava 中集成运算符的示例。 所以,我有一个问题:

    Observable.just("JUAN", "LUCILA", "ARMANDO").map(new Function<String, Integer>() {
        @Override
        public Integer apply(String s) throws Exception {
            return s.length();
        }
    }).all(new Predicate<Integer>() {
        @Override
        public boolean test(Integer integer) throws Exception {
            return integer > 0;
        }
    }).filter(new Predicate<Boolean>() {
        @Override
        public boolean test(Boolean aBoolean) throws Exception {
            return aBoolean;
        }
    }).subscribe(new Observer<Boolean>() {
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(Boolean value) {
            Log.d("STATUS: ", "OK");
        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onComplete() {
            Log.d("STATUS: ", "COMPLETE");
        }
    })

所以,AndroidStudio 在订阅(新观察者)时标记我错误。 我的目标是按长度将名称转换为数字,所以我希望创造一个条件,显然它会是真的,而且迟到了,从过滤器中过滤出 TRUE,然后向我显示一条日志消息,说 OK!

我希望你能帮助我! 谢谢!

【问题讨论】:

    标签: java android rx-java observable rx-android


    【解决方案1】:

    检查Singlehttp://reactivex.io/RxJava/2.x/javadoc/

    正如评论Observable.all(...) 中所说,您输入Single,然后从Single.filter(...) 输入Maybe

    所以使用你需要toObservable()然后订阅。

    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final Maybe<T> filter(Predicate<? super T> predicate) {
        ObjectHelper.requireNonNull(predicate, "predicate is null");
        return RxJavaPlugins.onAssembly(new MaybeFilterSingle<T>(this, predicate));
    }
    

    `

    改成

    Observable.just("JUAN", "LUCILA", "ARMANDO").map(new Function<String, Integer>() {
                @Override
                public Integer apply(String s) throws Exception {
                    return s.length();
                }
            }).all(new Predicate<Integer>() {
                @Override
                public boolean test(Integer integer) throws Exception {
                    return integer > 0;
                }
            }).filter(new Predicate<Boolean>() {
                @Override
                public boolean test(Boolean aBoolean) throws Exception {
                    return aBoolean;
                }
            }).toObservable().subscribe(new Observer<Boolean>() {
                @Override
                public void onSubscribe(Disposable d) {
    
                }
    
                @Override
                public void onNext(Boolean value) {
                    Log.d("STATUS: ", "OK");
                }
    
                @Override
                public void onError(Throwable e) {
    
                }
    
                @Override
                public void onComplete() {
                    Log.d("STATUS: ", "COMPLETE");
                }
            });
    

    【讨论】:

    • 我相信类型会在Observable.all(...) 更改为Single,然后在Single.filter(...) 更改为Maybe。由于Observable.filter(...) 返回Observable
    • @Kiskae 是的,根据来源
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多