Rxjava入门
简介
RxJava是一个开源的Rx框架ReactiveX的java版本。
ReactiveX的主要目的是通过一系列Observable组合异步或事件代码。其中使用的是观察者模式。
可以吧Reactive想象成不断向订阅者推送对象的机制,这个推送过程可以是同步的也可以是异步的。
helloworld
下面看一个简单的例子
首先引入rxjava的依赖
//gradle
compile group: 'io.reactivex', name: 'rxjava', version: '1.2.1'
@Test
public void helloworld() {
Observable obs=Observable.from(new String[]{"WORLD","WORLD2"});
obs.subscribe(value-> System.out.println("Hello " + value + "!"));
}
-------输出------
Hello WORLD!
Hello WORLD2!
首先创建了Observable对象,然后在上面订阅了一个subscriber输出observable的内容。
创建Observale
上面helloworld使用固定的值作为observable,可以使用Observable的create方法进行创建内容
@Test
public void create() {
Observable.create(subscriber -> {
IntStream.range(1, 5).forEach(i -> {
if(!subscriber.isUnsubscribed()){
subscriber.onNext("hello" + i);
}
});
if(!subscriber.isUnsubscribed()) {
subscriber.onCompleted();
}
}).subscribe(System.out::println);
}
-------输出------
hello1
hello2
hello3
hello4
上面的例子创建了4个(1-4)对象,Observable的create方法接受一个方法,在方法内部向subscriber推送信息。
subsribler输出得到的值。
上面的代码都是在主线程中运行的,如果想要不阻塞主线程可以在create中新建线程或使用线程池
@Test
public void asyn() throws InterruptedException {
Observable.create(subscriber -> {
new Thread(() -> {
IntStream.range(1, 5).forEach(i -> {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext("hello" + i);
}
});
if (!subscriber.isUnsubscribed()) {
subscriber.onCompleted();
}
}).start();
}).subscribe(obj -> {
System.out.println(obj);
System.out.println(Thread.currentThread());
});
Thread.sleep(1000);
}
-------输出------
hello1
Thread[Thread-0,5,main]
hello2
Thread[Thread-0,5,main]
hello3
Thread[Thread-0,5,main]
hello4
Thread[Thread-0,5,main]
Observable同时也提供了诸多如skip/take/map/zip等流式的转换操作。
Rxjava入门的更多相关文章
- RxJava入门优秀博客推荐
RxJava用了快半年了,现在越来越离不开这个库,从使用到逐渐接触它的背后实现,突然想写点什么关于RxJava的内容.在酝酿如何组织内容的时候,就去看看自己关于RxJava的收藏,发现满满的干货! 1 ...
- 史上最浅显易懂的RxJava入门教程
RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...
- 清晰易懂的RxJava入门实践
导入 我相信大家肯定对ReactiveX 和 RxJava 都不陌生,因为现在只要是和技术相关的网站,博客都会随处见到介绍ReactiveX和RxJava的文章. ReactiveX Reactive ...
- 在android 上 使用 rxjava 入门篇
什么是 rxJava? RxJava is a Java VM implementation of Reactive Extensions: a library for composing async ...
- RxJava入门之路(一)
RxJava接触过蛮长时间了,但是让我说个所以然来还是说不出来,归根结底还是还是理解不够深刻,趁着年底这个时候争取写个系列出来给自己的学习做个记录 注意区分RxJava1.0和2.0的区别,以下默认是 ...
- RxJava入门之路(二)
收集一下能够避免背压的运算符 sample(500, TimeUnit.MILLISECONDS) 定期收集数据,并发送最后一个 throttleFirst(500,TimeUnit.MILLISE ...
- RxJava_ _学了下RxJava
之前就知道有RxJava这玩意,知道这玩意很屌,不过也就止于看看标题,看几段介绍的程度(懒癌害人不浅).这周心血来潮,抽空把之前收藏的 扔物线 大神写的RxJava入门文章看了. http://gan ...
- RxJava的使用
前言 RxJava及RxAndroid比较详细的介绍可以参考该文档<给 Android 开发者的 RxJava 详解> 基本介绍 ReactiveX 及 RxJava使用大部分来自和参考& ...
- Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题
本文出处 :Tamic 文/ http://blog.csdn.net/sk719887916/article/details/52132106 Rxjava +Rterofit 需要掌握的几个技巧 ...
随机推荐
- webform Repeater、地址栏传值、Response
Repeater: 重复器 Repeater中有五个模板,这里需要注意的是4个 <HeaderTemplate> - 开头,只执行一次的内容 <ItemTemplate> - ...
- centos添加和删除用户及 xxx is not in the sudoers file.This incident will be reported.的解决方法
修改主机名:vim /etc/sysconfig/network 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 # ...
- MongoVUE1.6.9破解启动提示System.ArgumentException: 字体“Courier New”不支持样式“Regular”
用MongoVUE,发现报错,报错信息如下: System.ArgumentException: 字体"Courier New"不支持样式"Regular". ...
- echarts中显示效果option中必有的属性
写一个最简单的效果让option中不可缺少的属性. var option = { xAxis:[ //x轴,数组对象,其下至少有一个对象 {.....} ], yAxis:[//y轴,数组对象,其下可 ...
- 【面试题】D
一面: 1.介绍实习项目,负责那一部分: 2.C++的三大特性: 3.7层网络协议:应用层协议有哪些,TCP/IP属于哪一层,三次握手: 4.Linux: 4.1.查看进程: 4.2.vim文件与to ...
- Java throws Exception、try、catch
throws Exception是方法后面接的 意思是向上级抛出异常 try{}里面的异常会被外面的catch捕捉到 抛出异常是throw new Exception("异常"); ...
- jmobile学习之路 ---- 视口
当我们的浏览器在窗口最大化的时候,此时屏幕的宽度,就是我们桌面的分辨率.这个规则仅仅适用于PC! 我们试图在iPhone中输出屏幕宽度,你会发现屏幕宽度是980!居然和PC屏幕差不多大! 苹果主导的这 ...
- C++ 类对象和 指针的区别
C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...
- 轻松3步实现c#windowsform窗体美化
1.需要下载IrisSkin4.dll或者IrisSkin2.dll和ssk皮肤文件. 2.添加引用IrisSkin4.dll或者IrisSkin2.dll到项目中,将下载好的ssk皮肤文件复制到项目 ...
- [转]FINDSTR正则表达式小结
前言:最近写了一个bat用于快速编译swf至目标目录,想利用FINDSTR命令通过匹配目标目录名称,匹配数量大概600多个,发现匹配耗时比较久,大概花费10余秒,因此还是放弃字符匹配,乖乖拼出全称来定 ...