首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxJava2操作符之“Buffer”

RxJava2操作符之“Buffer”

作者头像
坑吭吭
发布2018-08-31 17:36:00
3990
发布2018-08-31 17:36:00
举报

作用

字面意思:缓冲 其实就是将要发射的数据封装成多个缓冲区,每次发射一个缓冲区

示例用法

 Observable.just("one", "two", "three", "four", "five")//创建了一个有5个数字的被观察者
                // 3 means,  it takes max of three from its start index and create list
                // 1 means, it jumps one step every time
                .buffer(3, 1)
                .subscribe(getObserver());

这里贴一下观察者,为了能更清晰的看到发射出来的内容,我们将每一个item都打印出来

    private Observer<List<String>> getObserver() {
        return new Observer<List<String>>() {

            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, " onSubscribe : " + d.isDisposed());
            }

            @Override
            public void onNext(List<String> stringList) {
                textView.append(" onNext size : " + stringList.size());
                textView.append(AppConstant.LINE_SEPARATOR);
                Log.d(TAG, " onNext : size :" + stringList.size());
                for (String value : stringList) {
                    textView.append(" value : " + value);
                    textView.append(AppConstant.LINE_SEPARATOR);
                    Log.d(TAG, " : value :" + value);
                }

            }

            @Override
            public void onError(Throwable e) {
                textView.append(" onError : " + e.getMessage());
                textView.append(AppConstant.LINE_SEPARATOR);
                Log.d(TAG, " onError : " + e.getMessage());
            }

            @Override
            public void onComplete() {
                textView.append(" onComplete");
                textView.append(AppConstant.LINE_SEPARATOR);
                Log.d(TAG, " onComplete");
            }
        };
    }

运行结果

运行结果

分析

首先,我们的被观察者里面有五个item,分别是1~5的英文, 然后看我们的设置 buffer(3,1) ,3为缓冲区大小,1可以理解为指针向后移动的距离 开始 (1,2,3)4,5 ->前三个item在缓存区中,分别是1,2,3;然后 1(2,3,4)5 ->缓冲区向后移动了一位,里面依然是三个item,分别是2,3,4,继续 1,2(3,4,5)->不解释,继续 1,2,3(4,5)->这时后面已经没有足够的item来填满缓冲区了,所以这时缓冲区里只能是4,5,继续 1,2,3,4(5)->好了,这个时候已经不能再向后移动了,因为后面没有值了,这时onComplete

只有一个例子还不是很好把握这个操作符,下面 如果我们改成buffer(3,2),会怎么样呢?我直接在这里发答案咯 (1,2,3)4,5 ->开始还是一样的 1,2(3,4,5)->这是第二步,直接向后移动了两个单位 1,2,3,4(5)->直接到了这一步了,怎么样和你理解的一样么?

buffer(3,2)

总结

这个算是稍微有点复杂的操作符了,不知道这种形式大家能不能理解。。 这个系列只有干货,如果大家有什么好的建议的话欢迎在下面评论。或者觉得我哪里写的不够形象了,同样可以提出来。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.04.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作用
  • 示例用法
  • 运行结果
  • 分析
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档