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. PythonCrashCourse 第七章习题

    编写一个程序,询问用户要租赁什么样的汽车,并打印一条消息,如"Let me see if I can find you a Subaru" car =input("Wha ...

  2. .NET Core + K8S + Apollo 玩转配置中心

    1.引言 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...

  3. Vue管理系统前端系列二相关工具引入及封装

    目录 sass-loader/vuex 等的引入说明 引入 element 引入 axios 1.基本使用 2.封装使用 2.1 开发环境配置请求地址 2.2 配置代理 2.3 添加接口相关文件 sa ...

  4. linux服务器核心知识

    电脑:辅助人脑的工具 现在的人们几乎无时无刻都会碰电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑.智慧型手机等等,这些东西都算是电脑.虽然接触的这么多,但是,你了解电脑里面的元件有什么吗 ...

  5. springMVC入门(三)------springMVC的处理器映射器和处理器适配器配置

    简介 springMVC的处理器映射器和处理器适配器存在多种配置,因此在此专门做一个总结 常见处理器映射器.适配器的配置 springmvc多个映射器多个处理器可以并存 所有的映射器都实现了Handl ...

  6. 第五篇 Scrum冲刺博客

    一.会议图片 二.项目进展 成员 完成情况 今日任务 冯荣新 未完成 购物车列表,购物车工具栏 陈泽佳 未完成 静态结构 徐伟浩 商品信息录入 协助前端获取数据 谢佳余 未完成 搜索算法设计 邓帆涛 ...

  7. 牛客网PAT练兵场-数字黑洞

    题解:循环即可 题目地址:https://www.nowcoder.com/questionTerminal/2e6a898974064e72ba09d05a60349c9e /** * Copyri ...

  8. HTTP系列1番外之头部字段大全

    原文地址:https://www.jianshu.com/p/6e86903d74f7 常用标准请求头 字段 属性 举例 Accept 设置接受的内容类型 Accept: text/plain Acc ...

  9. 高可用集群corosync+pacemaker之crmsh使用(一)

    上一篇博客我们聊了下高可用集群corosync+pacemaker的相关概念以及corosync的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13585 ...

  10. CodeForces - 1114D-Flood Fill (区间dp)

    You are given a line of nn colored squares in a row, numbered from 11 to nn from left to right. The  ...