Rx学习笔记之过滤Observables

在之前的一篇中,大致写了一些Rx的简单使用,如果兴趣的可以看下Rx学习笔记总结

这两天也在学习Rx,原本计划的挺多,但是被自己少之又少的知识储备和经验给浪费了大量的时间,以至于晚上两点多的时候也没有完整的解决错误。在这里也是刚了解过,可能准备的不是很充分,这里就简单的记下笔记,也算是对自己的这两天的一个总结。 ###过滤序列filter函数 RxJava让我们使用filter()方法来过滤我们观测序列中,不想要的值,比如,现在我的这个应用中,是获取到了所有手机安装应用的列表,那么我们这个时候只想要展示我们需要的应用的列表,比如展示以A开头的应用的列表,我们该怎么做呢,我们就可以使用filter()函数帮助我们。我们看下代码。(代码最清晰) 先看下效果图: ####没有过滤之前的效果图:

####过滤之后的效果图:


    /**
     * 过滤系列,我们可以利用filter()方法来过滤我们观测序列中不想要的值例如我们只想要开头是C的应用
     * 我们可以filter(appInfo ->appInfo.getName().startsWith("C"))
     * <p>
     * 如果不使用lambda表达式,是这样写的
     * filter(new Func1<AppInfo, Boolean>() {
     *
     * @param apps
     * @Override public Boolean call(AppInfo appInfo) {
     * return appInfo.getName().startsWith("C");
     * }
     * })
     * 我们传入一个新的Func1对象给filter()函数,Func1有一个AppInfo对象来作为他的参数类型并且返回
     * Boolean对象,只要条件符合filter()函数,就会返回true,此时,值会发出去并且所有的观察者都会接受到
     *
     * 当然我们也可以检测null
     */
    private void loadList(List<AppInfo> apps) {
        mRecyclerView.setVisibility(View.VISIBLE);
        Observable.from(apps)
                .filter(appInfo ->
                        appInfo.getName().startsWith("A"))
                .subscribe(new Subscriber<AppInfo>() {
                    @Override
                    public void onCompleted() {
                        mSwipeRefreshLayout.setRefreshing(false);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Toast.makeText(getActivity(), "Something is wrong", Toast.LENGTH_SHORT).show();
                        mSwipeRefreshLayout.setRefreshing(false);
                    }

                    @Override
                    public void onNext(AppInfo appInfo) {
                        mAppInfos.add(appInfo);
                        mAdapter.addData(mAppInfos.size() - 1, appInfo);
                    }
                });
    }

复制代码

是不是很好用呢,不急,还有更好的呢,我们是不是有的时候在请求数据回来,去判断数据是否null,如果不为空,我们在去设置数据,同样,我们可以使用filter()帮我们过滤null的数据

            filter(appInfo1 -> appInfo1!=null)  //lambda表达式
            
            filter(new Func1<AppInfo, Boolean>() {  //正常的写法
                    @Override
                    public Boolean call(AppInfo appInfo) {
                        return appInfo != null;
                    }
                })
复制代码

看起来就一行代码(lambda表达式的写法),但是他帮助我们免去了在onNext()函数调用后再去检测null值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值