RxJava--Buffer,GroupBy 对比
Buffer
设定收集n个元素为一组,以下方代码为例,三个为一组,则当组满三个元素时,返回一次List数据 没组满三个元素时,如果调用onComplete,直接发送剩余元素,没调用onComplete,一直等待
PublishSubject<String> subject = PublishSubject.create();
Disposable disposable = subject
.buffer(3)//获取三个为一组发送
.subscribe(new Consumer<List<String>>() {
@Override
public void accept(List<String> s) throws Exception {
StringBuilder content = new StringBuilder();
for (String index : s) {
content.append(index).append(",");
}
LogUtils.e("rxJavaBuffer==" + content);
}
});
subject.onNext("1");
subject.onNext("2");
subject.onNext("3");
subject.onNext("4");
subject.onNext("5");
subject.onNext("6");
subject.onNext("7");
subject.onNext("8");
subject.onNext("9");
subject.onNext("10");
subject.onComplete();
复制代码
GroupBy
很有意思的操作符。先将获取的元素分组(自己分配key),生成对应的GroupedObservable GroupedObservable有点类似HashMap,包含key(自己分配的)和元素 应该注意的是,当每组GroupedObservable首次订阅新的订阅者后,后续同组元素直接将数据发送给新的订阅者。看代码
PublishSubject<String> subject = PublishSubject.create();
Disposable disposable = subject
.groupBy(new Function<String, String>() {
@Override
public String apply(String s) throws Exception {
// ? 第一步。 数据分类,分配不同的key
if (Integer.valueOf(s) < 4) {
return "one";
} else if (Integer.valueOf(s) < 7) {
return "two";
}
if (Integer.valueOf(s) < 10) {
return "three";
}
return "other";
}
})
.subscribe(new Consumer<GroupedObservable<String, String>>() {
@Override
public void accept(GroupedObservable<String, String> sub) throws Exception {
// ? 第二步。 根据不同的key,绑定新的订阅者。
// 如果改组已经订阅了新的订阅者,直接发送给新的订阅者
LogUtils.e(sub.getKey());
switch (sub.getKey()) {
case "one":
sub.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
LogUtils.e("GroupedObservable==one" + s);
}
});
break;
case "two":
sub.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
LogUtils.e("GroupedObservable==two" + s);
}
});
break;
case "three":
sub.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
LogUtils.e("GroupedObservable==three" + s);
}
});
break;
default:
sub.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
LogUtils.e("GroupedObservable==other" + s);
}
});
break;
}
}
});
subject.onNext("1");
subject.onNext("2");
subject.onNext("3");
subject.onNext("4");
subject.onNext("5");
subject.onNext("6");
subject.onNext("7");
subject.onNext("8");
subject.onNext("9");
subject.onNext("10");
subject.onComplete();
复制代码
RxJava--Buffer,GroupBy 对比的更多相关文章
- Protocol Buffer序列化对比Java序列化.
初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto ...
- MySQL缓存之Qcache与buffer pool对比
Q:innodb buffer pool和Qcache的缓存区别? A: 1.Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0 ...
- underscorejs-indexBy学习
2.19 indexBy 2.19.1 语法 _.indexBy(list, iteratee, [context]) 2.19.2 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 ...
- QuietHit小Game
根据项目的要求分别建出几个类 有游戏类 玩家类 测试类 等级类 等级时间类 一以下类图: 游戏类: public class Game { private Player player; public ...
- Netty精粹之玩转NIO缓冲区
摘要: 在JAVA NIO相关的组件中,ByteBuffer是除了Selector.Channel之外的另一个很重要的组件,它是直接和Channel打交道的缓冲区,通常场景或是从ByteBuffer写 ...
- OpenSource.SerializationLibrary
1. Cap'n Proto protocol buffer的主要作者之一创建的新项目.其主页描述Cap'n Proto的性能比PB快很多. http://kentonv.github.io/capn ...
- 转载 IO、文件、NIO【草案四】
本章目录: 1.IO类相关内容 2.文件和目录 3.文件高级操作 NIO详解[1]——缓冲区(Buffer)[深入理解,总结自<Java-NIO>]: [*:下边的Buffer又指代抽象 ...
- 【Java语言特性学习之一】设计模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- MySQL索引失效之隐式转换
常见索引失效: 1. 条件索引字段"不干净":函数操作.运算操作 2. 隐式类型转换:字符串转数值:其他类型转换 3. 隐式字符编码转换:按字符编码数据长度大的方向转换,避免数据截 ...
随机推荐
- CF632(div.2)C. Eugene and an array
https://codeforces.ml/contest/1333/problem/C 大概题意是规定和为0的数组为不合格数组,询问给定数组中共有多少个合格子数组. 解题 子数组的数量 一个长度为 ...
- Python模块---制作属于自己的有声小说
操作环境 Python版本: anaconda3 python3.7.4 操作系统: Ubuntu19.10 编译器: pycharm社区版 用到的模块: pyttsx3,requests pysst ...
- vue技术栈进阶(02.路由详解—基础)
路由详解(一)--基础: 1)router-link和router-view组件 2)路由配置 3)JS操作路由
- Linux基础篇,正则表达式
一.正则表达式特殊符号: 二.grep的用法 grep [-A|B|a|c|i|n|v] [--color=auto] '搜索字串' filename -A ===> after缩写,后面接数字 ...
- Python常见数据结构-Set集合
集合基本特点 集合是无序的,且集合内无重复值. 集合不支持索引和切片 集合常见操作及方法 s1 = {1,2,3} s2 = {2,3,4} s1.add(4) #.add()方法添加一个元素 s1. ...
- 28.4 Calendar 日历
/* * Calendar:日历,提供了一些操作年月日时的方法 * 获取 * 修改 * 添加 */ public class CalendarDemo { public static void mai ...
- leetcode c++做题思路和题解(4)——队列的例题和总结
队列的例题和总结 0. 目录 栈实现队列 队列实现栈 滑动窗口最大值 1. 栈实现队列 FIFO和FILO,相当于+-号,互转都是利用"负负得正"的原理. 官方解答中第二种思路很6 ...
- 子域名爆破工具:OneForALL
0x00 简介 OneForAll是一款功能强大的子域收集工具 0x01 下载地址 码云: https://gitee.com/shmilylty/OneForAll.git Github: http ...
- 【python实现卷积神经网络】padding2D层实现
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- Android电池信息获取
Android 可以通过BroadcastReceiver来获取电池信息改变的广播(ACTION_BATTERY_CHANGED),从而获取到相关的电池信息. 电池信息,及其对应的相关常数(参考网址: ...