RXJAVA提供了以下变换操作,对Observable的消息进行变换操作:

1.window

定期将来自Observable的数据分拆成一些Observable窗口,然后发射这些窗口,而不是每次发射一项。

Observable<String> observable = Observable.just("123", "456","789","abc");

observable.window(3).subscribeWith(new Observer<Observable<String>>(){

@Override

public void onComplete() {

System.out.println("complete");

}

@Override

public void onError(Throwable arg0) {

System.out.println("error");

}

@Override

public void onNext(Observable<String> arg0) {

arg0.subscribeWith(new Observer<String>(){

@Override

public void onSubscribe(Disposable d) {

System.out.println("onSubscribe");

}

@Override

public void onNext(String t) {

System.out.println(t);

}

@Override

public void onError(Throwable e) {

System.out.println("error");

}

@Override

public void onComplete() {

System.out.println("complete");

}});

}

@Override

public void onSubscribe(Disposable arg0) {

System.out.println("onSubscribe");

}

});

}

输出结果

onSubscribe

onSubscribe

123

456

789

complete

onSubscribe

abc

complete

complete

2.map

变换接收到的数据,重新发放出去。map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据。

Observable.just("123", "456","789").map(new Function<String,Integer>(){

@Override

public Integer apply(String t) throws Exception {

return Integer.parseInt(t);

}}).subscribeWith(new Observer<Integer>(){

@Override

public void onSubscribe(Disposable d) {

System.out.println("onSubscribe");

}

@Override

public void onNext(Integer t) {

System.out.println(t);

}

@Override

public void onError(Throwable e) {

System.out.println("onError");

}

@Override

public void onComplete() {

System.out.println("onComplete");

}});

}

输出结果

onSubscribe

123

456

789

onComplete

3.flatmap

将Observable发射的数据变换为Observables集合,然后将这些Observable发射的数据平坦化的放进一个单独的Observable,内部采用merge合并。

Observable<String> observable = Observable.just("123", "456","789","abc");

observable.flatMap(new Function<String,Observable<String>>(){

@Override

public Observable<String> apply(String t) throws Exception {

return Observable.just(t+"flatmap");

}}

).subscribeWith(new Observer<String>(){

@Override

public void onSubscribe(Disposable d) {

System.out.println("onSubscribe");

}

@Override

public void onNext(String t) {

System.out.println(t);

}

@Override

public void onError(Throwable e) {

System.out.println("onError");

}

@Override

public void onComplete() {

System.out.println("onComplete");

}});

}

输出结果

onSubscribe

123flatmap

456flatmap

789flatmap

abcflatmap

onComplete

RXJAVA之变换操作的更多相关文章

  1. RxJava【变换】操作符 map flatMap concatMap buffer MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. 【领略RxSwift源码】- 变换操作(Operators)

    在上一篇中,我们分析了在RxSwift中的整个订阅流程.在开讲变换操作之前,首先要弄清楚Sink的概念,不清楚的同学可以翻看上一篇的分析.简单的来说,在每一次订阅操作之前都会进行一次Sink对流的操作 ...

  3. ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(上)

    前言 在上篇文章中,详细分析了RACSignal是创建和订阅的详细过程.看到底层源码实现后,就能发现,ReactiveCocoa这个FRP的库,实现响应式(RP)是用Block闭包来实现的,而并不是用 ...

  4. Rxjava2实战--第四章 Rxjava的线程操作

    Rxjava2实战--第四章 Rxjava的线程操作 1 调度器(Scheduler)种类 1.1 RxJava线程介绍 默认情况下, 1.2 Scheduler Sheduler 作用 single ...

  5. pytorch张量数据索引切片与维度变换操作大全(非常全)

    (1-1)pytorch张量数据的索引与切片操作1.对于张量数据的索引操作主要有以下几种方式:a=torch.rand(4,3,28,28):DIM=4的张量数据a(1)a[:2]:取第一个维度的前2 ...

  6. RxSwift 之变换操作

    https://www.aliyun.com/jiaocheng/349821.html RxSwift入坑解读-你所需要知道的各种概念 http://www.open-open.com/lib/vi ...

  7. RXJAVA之聚合操作

    concat 按顺序连接多个Observables.需要注意的是Observable.concat(a,b)等价于a.concatWith(b). startWith 在数据序列的开头增加一项数据.s ...

  8. RxJava 教程-1 简介 原理 线程控制 变换

    简介 RxJava 是什么? RxJava 在 GitHub 主页上的自我介绍是 RxJava is a Java VM implementation of ReactiveX: a library ...

  9. RxJava操作符(03-变换操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51649975 本文出自:[openXu的博客] 目录: Buffer FlatMap fla ...

随机推荐

  1. JavaSwing关于GridBagLayout(网格袋布局)的使用

    下面的链接有初步的介绍: https://blog.csdn.net/xietansheng/article/details/72814552 关于GridBagConstraints: GridBa ...

  2. Shell编程—gawk进阶

    1使用变量 awk编程语言支持两种不同类型的变量: 内建变量 自定义变量 1.1内建变量 1. 字段和记录分隔符变量 数据字段变量允许你使用美元符号($)和字段在该记录中的位置值来引用记录对应的字段. ...

  3. Kafka工作流程

    Kafka生产过程分析 1 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机 ...

  4. Java多线程_CAS算法和ABA问题

    CAS算法概述CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换.CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B. CAS指令执行时,当且仅当内存地址V ...

  5. 开始进行lammps手册的学习啦,跟着Manual一边翻译一边做吧!(转载)

    转载自:http://blog.sina.com.cn/s/blog_64813e370100ngsz.html 注明:黄色部分基本上为不懂的部分,红色字体为所做注释 一.各种文件的介绍: 1 in ...

  6. Myeclipse maven 配置有问题 改之后重启还是不好用

    在配置maven项目的时候我一大意选错了maven服务,然后回来改配置文件的时候发现改完之后重启并没有效果,重新清了好几次编译也不好用,最后发现最好是手动去更新一下maven服务的配置文件 位置如下: ...

  7. CF1270B Interesting Subarray 题解

    22:20下晚自习所以只打了10+min,然而这并不能成为我脑抽没一眼看出B题的借口,所以又掉回绿名了qwq.所以我还是太菜了. 题意分析 给出一个数列,要求找出一段连续的子数列满足这个子数列的最大值 ...

  8. CF1271C Shawarma Tent 题解

    通过分析样例可以发现,离学校越近的地点经过的路线也会越多,因此我们只要考虑学校周围的八个点即可.而且可以发现,对于一个点,路线会经过这个点的节点是确定的.因此在输入的时候可以统计学校周围八个节点被经过 ...

  9. @RequestBody和@RequestParam

    @RequestBody的使用 https://blog.csdn.net/justry_deng/article/details/80972817 (@RequestBody Map map)接收多 ...

  10. [PyTorch 学习笔记] 3.2 卷积层

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/nn_layers_convolution.py 这篇文 ...