Rxjava入门 一
2016-06-07 16:35
429 查看
函数式编程(英语:functional
programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
现在函数式编程越来越流行,这种编程方式强调程序执行的结果而非执行的过程。结合MVP设计模式让我们开发变得越来越便捷。
不过东西好是好,对于新手来说入门有些困难。Rxjava入门还是有些时间成本的。Android要实现函数式编程需要引入两个库文件,方式如下:
RxJava
RxAndroid
说了半天,到底什么是rxjava呢,初学者肯定一头雾水。简单来说,ReactiveX就是”观察者模式+迭代器模式+函数式编程”,它扩展了观察者模式,通过使用可观察的对象序列流来表述一系列事件,订阅者进行占点观察并对序列流做出反应(或持久化或输出显示等等);借鉴迭代器模式,对多个对象序列进行迭代输出,订阅者可以依次处理不同的对象序列;使用函数式编程思想(functional programming),极大简化问题解决的步骤。
RxJava最核心的两个东西就是Observables(被观察者,也就是事件源)和Subscribers(观察者),由Observables发出一系列的事件,Subscribers进行订阅接收并进行处理,看起来就好像是设计模式中的观察者模式,但是跟观察者模式不同的地方就在于,如果没有观察者(即Subscribers),Observables是不会发出任何事件的。
通俗来讲,Observables就是个事件发射器,将事件发射到Subscribers上进行处理。如果事件不唯一,就会对事件进行轮询处理,如果在此过程中出现异常就直接抛出,事件中断。
说了这么久,对于新手来说依旧没什么印象,反而觉得复杂难懂。下面我们来结合例子说明
首先我们创建了一个Observable对象,然后将“helloworld”数据传递给他。不过现在observable不会有任何动作,我们刚才说过,没有subscriber对象,Observables是不会发出事件的。
现在我们创建了subscriber对象,它是用来处理事件的。subscriber中有三个方法分别是onNext、onError、onCompleted,从这个方法中可以看出,onNext可以多次执行,但在这里我们一个一个数据源,所以只会执行一次,onError在有错误的时候执行,onCompleted在没有任何事件需要处理之后执行。
当subscriber订阅observable之后,事件开始发送。在这个过程中我们不关心内部是怎样发送数据的,如果没有异常发出,onNext应该会被调用。
我们运行一下程序
可以看到helloworld输出出来了。一次事件完成。 另外,我们还发现onCompleted也被打印了出来。
刚才我们输出了helloworld。有人问,如果是数组呢,或者是List()。Rxjava已经为我们考虑到了。Observable给我们提供了多种初始化方式,最常见的除了just()方式外还有from()
我们从图片中可以看到,构造方法里是各种泛型,我们可以传入类似于数组的参数,比如List Map Array及其子类。
我们再次创建了observable对象,剩下的步骤读者应该知道了吧,这里我直接给出代码
programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
现在函数式编程越来越流行,这种编程方式强调程序执行的结果而非执行的过程。结合MVP设计模式让我们开发变得越来越便捷。
不过东西好是好,对于新手来说入门有些困难。Rxjava入门还是有些时间成本的。Android要实现函数式编程需要引入两个库文件,方式如下:
RxJava
RxAndroid
1 2 | compile 'io.reactivex:rxjava:x.y.z' compile 'io.reactivex:rxandroid:1.2.0' |
RxJava最核心的两个东西就是Observables(被观察者,也就是事件源)和Subscribers(观察者),由Observables发出一系列的事件,Subscribers进行订阅接收并进行处理,看起来就好像是设计模式中的观察者模式,但是跟观察者模式不同的地方就在于,如果没有观察者(即Subscribers),Observables是不会发出任何事件的。
通俗来讲,Observables就是个事件发射器,将事件发射到Subscribers上进行处理。如果事件不唯一,就会对事件进行轮询处理,如果在此过程中出现异常就直接抛出,事件中断。
说了这么久,对于新手来说依旧没什么印象,反而觉得复杂难懂。下面我们来结合例子说明
编写helloworld
1 | Observable<String> observable = Observable.just("helloworld"); |
1 23 | Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onCompleted"); } @Override public void onNext(String s) { System.out.println(s); } }; |
1 | observable.subscribe(subscriber); |
我们运行一下程序
可以看到helloworld输出出来了。一次事件完成。 另外,我们还发现onCompleted也被打印了出来。
打印数组
刚才我们输出了helloworld。有人问,如果是数组呢,或者是List()。Rxjava已经为我们考虑到了。Observable给我们提供了多种初始化方式,最常见的除了just()方式外还有from()我们从图片中可以看到,构造方法里是各种泛型,我们可以传入类似于数组的参数,比如List Map Array及其子类。
我们再次创建了observable对象,剩下的步骤读者应该知道了吧,这里我直接给出代码
1 23 | Observable<String> observable = Observable .from(new String[]{"one", "two", "three", "four"}); observable.subscribe(new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { System.out.println(s); } }); 06-02 20:51:34.486 28207-28207/? I/System.out: one 06-02 20:51:34.486 28207-28207/? I/System.out: two 06-02 20:51:34.486 28207-28207/? I/System.out: three 06-02 20:51:34.486 28207-28207/? I/System.out: four |
相关文章推荐
- 货币/钱计算
- SpringMVC:JSON形式输出(基于Fastjson)
- Java线程之Condition高效线程通信
- Eclipse 安装FindBugs插件
- Java过滤器与SpringMVC拦截器之间的关系与区别
- java中基本输入输出流的解释
- myeclipse toolbar添加按钮
- Error:(226, 38) java: 找不到符号方法 getServletContext()
- Java RCP
- Java:String和Date、Timestamp之间的转换
- struts2声明式异常以及用Filter模拟声明式异常
- Java遍历Map集合方法
- Spring处理id相同的bean
- JAVA打包war的几种方法
- Java 类初始化顺序
- java中 用telnet 判断服务器远程端口是否开启
- Java 反编译工具几枚(class转java)
- wordcount
- java界面,BorderLayout,GridLayout,FlowLayout
- 超级容易理解!!!Java的面向对象思想———类与对象。