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 需要掌握的几个技巧 ...
随机推荐
- 用vue2 +vue-router2 + es6 +webpack 高仿饿了么app(干货满满)
#高仿饿了么app商家详情 (vue2 +vue-router2 + es6 +webpack ) ##demo [demo 地址](http://liangxiaojuan.github.io/ ...
- 修改socket为keepAlive
参考文章:http://blog.csdn.net/ctthuangcheng/article/details/8596818 [root@mdw- gpadmin]# vi /etc/sysctl. ...
- CGrowableArray解析 _ DXUT容器
CGrowableArray的声明 in DXUTmisc.h //--------------------------- ...
- 常用.NET库使用总结
Json.NET 获取类实例对应的jtoken:JObject.FromObject() 获取数组实例对应的jtoken:JArray.FromObject() Json.NET将枚举转换为int R ...
- [ACM训练] 算法初级 之 搜索算法 之 深度优先算法DFS (POJ 2251+2488+3083+3009+1321)
对于深度优先算法,第一个直观的想法是只要是要求输出最短情况的详细步骤的题目基本上都要使用深度优先来解决.比较常见的题目类型比如寻路等,可以结合相关的经典算法进行分析. 常用步骤: 第一道题目:Dung ...
- js库之dojo
使用dojo源代码 1.下载Dojo 2.dojo目录结构如下 demo/ myModule.js dojo/ dijit/ dojox/ util/ hellodojo.html 3.引入dojo. ...
- Android屏幕适配笔记
1.限定符 为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件,在一般情况下我们都是在layout文件夹下为某个活动准备一个默认的布局 ...
- ES6(五) 数组扩展
Array.of方法用于将一组值,转换为数组. Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES ...
- GDB调试汇编分析
GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行. GCC编译 使用gcc -g gdbtest.c -o gdb ...
- daima
# -*- coding: utf-8 -*- import theano import theano.tensor as T import numpy as np from sklearn impo ...