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 对比的更多相关文章

  1. Protocol Buffer序列化对比Java序列化.

    初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto ...

  2. MySQL缓存之Qcache与buffer pool对比

    Q:innodb buffer pool和Qcache的缓存区别? A: 1.Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0 ...

  3. underscorejs-indexBy学习

    2.19 indexBy 2.19.1 语法 _.indexBy(list, iteratee, [context]) 2.19.2 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 ...

  4. QuietHit小Game

    根据项目的要求分别建出几个类 有游戏类 玩家类 测试类 等级类 等级时间类 一以下类图: 游戏类: public class Game { private Player player; public ...

  5. Netty精粹之玩转NIO缓冲区

    摘要: 在JAVA NIO相关的组件中,ByteBuffer是除了Selector.Channel之外的另一个很重要的组件,它是直接和Channel打交道的缓冲区,通常场景或是从ByteBuffer写 ...

  6. OpenSource.SerializationLibrary

    1. Cap'n Proto protocol buffer的主要作者之一创建的新项目.其主页描述Cap'n Proto的性能比PB快很多. http://kentonv.github.io/capn ...

  7. 转载 IO、文件、NIO【草案四】

    本章目录: 1.IO类相关内容 2.文件和目录 3.文件高级操作  NIO详解[1]——缓冲区(Buffer)[深入理解,总结自<Java-NIO>]: [*:下边的Buffer又指代抽象 ...

  8. 【Java语言特性学习之一】设计模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. MySQL索引失效之隐式转换

    常见索引失效: 1. 条件索引字段"不干净":函数操作.运算操作 2. 隐式类型转换:字符串转数值:其他类型转换 3. 隐式字符编码转换:按字符编码数据长度大的方向转换,避免数据截 ...

随机推荐

  1. Flask 和Django

    软件系统发展到今天已经很复杂了,在服务端软件,设计的知识很广泛,为了降低开发难度,提高开发效率,在某些方面去使用别人成熟的框架. 一些事务处理,安全性,数据流控制等都可以让框架处理,而开发人员把更多的 ...

  2. 【php】正则表达式

    一.生活当中的正则表达式: a)Notepad++.word等这些具有编辑功能的软件,都具有一个查找.替换的功能,这个功能,其实就属于正则模式的一种匹配.替换:包括windows当中可以实现的查找,也 ...

  3. scrapy中使用selenium来爬取页面

    scrapy中使用selenium来爬取页面 from selenium import webdriver from scrapy.http.response.html import HtmlResp ...

  4. flask-migrate的基本使用

    Flask-migrate 在实际开发环境中,经常会发生数据库修改的行为.一般我们修改数据库不会手动的去修改,而是去修改orm对应的模型, 然后再把模型映射到数据库中.这时候如果有一个工具能专门做这种 ...

  5. Linux基础篇,Shell

    一.基本知识 Shell Script是一种脚本.可以用来极大的简化计算机的管理.在谱写shell script的时候,需要注意以下问题: 1. 指令的执行是从上而下. 从左而右的分析与执行: 2. ...

  6. hadoop(十)hdfs上传删除文件(完全分布式七)|12

    集群测试 上传小文件到集群,随便选择一个小文件上传到hdfs的根目录 [shaozhiqi@hadoop102 hadoop-3.1.2]$ bin/hdfs dfs -put wcinput/wc. ...

  7. WPF 仿语音播放 自定义控件

    原理很简单,利用Path画一个图,然后用动画进行播放,播放时间由依赖属性输入赋值与控件内部维护的一个计时器进行控制. 控件基本是玩具,无法作为真实项目使用. 非专业UI,即使知道怎么画图也是画的不如意 ...

  8. commonJS、AMD和CMD之间的区别

    JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...

  9. L24 word2vec

    词嵌入基础 我们在"循环神经网络的从零开始实现"一节中使用 one-hot 向量表示单词,虽然它们构造起来很容易,但通常并不是一个好选择.一个主要的原因是,one-hot 词向量无 ...

  10. Plant 矩阵快速幂,,,,有点忘了

    题目链接:https://codeforces.com/contest/185/problem/A 题目大意就是求n次以后  方向朝上的三角形的个数 以前写过这个题,但是忘了怎么做的了,,,又退了一遍 ...