日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

一篇RxJava友好的文章(一)

發布時間:2025/3/21 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇RxJava友好的文章(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請標明出處:
http://blog.csdn.net/forezp/article/details/52886700
本文出自方志朋的博客

Rxjava在目前的開發中已經是如火如荼,非常的流行,唯一的就是上手不太容易,學習成本高,學習rxjava有一段時間了,也看了老羅的rxjava視頻,決定自己總結下。

另外歡迎star我的另一個項目,瓣呀,一個基于豆瓣API模仿網易云音樂的開源app

準備

在android工程中的gradle.build中配置,為了更好的理解,所以導入java8 的lambda 表達式。

compile 'io.reactivex:rxjava:1.2.1' compile 'io.reactivex:rxandroid:1.2.1'

基礎

rxjava 中有兩個核心的對象Observable(被觀察者,它會發出一系列的事件源)和Subscribers(觀察者,接受事件源),Observable發出事件后,中間可以有一系列的操作、變化,可以精確的控制事件,最終被觀察者所接收。其中Observable每發出一個事件就會,就會調用他的subscriber 的onext(),直到發生錯誤onerror()或onComplete()結束。

1.用Observable.create去創建一個Observable對象,并發射一個”hi Rxjava”,就結束。

Observable<String> observable= Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber){ subscriber.onNext("hi RxJava"); subscriber.onCompleted(); }});

然后,我們需要去創建一個subscriber去處理observable發射過來的數據。

Subscriber<String> subscriber=new Subscriber<String>() {@Override public void onCompleted() { Log.e(TAG,"onCompleted"); } @Override public void onError(Throwable e) { Log.e(TAG,e.getMessage()); } @Overridepublic void onNext(String s) { Log.e(TAG,s); }};

最后需要,subscribe函數把observable對象和subscriber對象關聯起來,這樣就完成了subscriber對observable的訂閱。

observable.subscribe(subscriber);

程序運行一下:

可能你覺得這樣太復雜了,但是涉及到了與之前不一樣的變成思想,即響應式編程。

2.用just去創建observable,just英語意思是僅僅的意思,如果只發出一個事件可以用這種方式。另外在創建Subscriber的時候,如果僅僅關心onNext(),這時可以用Action1這個對象。

Observable.just("hi Rxjava2").subscribe(new Action1<String>() { @Override public void call(String s) { Log.e(TAG,s); }});

運行程序:

3.用from創建observable,這種方式創建,需要傳入一個集合,它會一個一個的發射,在subscriber上它會一個一個的接收。

String [] strs={"1","2","3","4"}; Observable.from(Arrays.asList(strs)) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.e(TAG,s); }});

運行程序:

是不是有點像高級for循環-.- 。

4.操作符map,是用在observable和subcriber中間,是為了操作observable發射的數據,操作之后的數據,會被subcriber 接收。rxjava有很多操作符,map操作符是將一個事件轉換為另一個事件的。

Observable.just("hi rxjava") .map(new Func1<String, String>() { @Override public String call(String s) { return s+" ,你好rxjava"; }}) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.e(TAG,s); }});

運行程序:

另外,map操作符可以將轉換類型,比如string 轉int .

Observable.just("hi rxjava") .map(new Func1<String, Integer>() { @Override public Integer call(String s) { return s.hashCode(); }}) .subscribe(new Action1<Object>() { @Override public void call(Object s) { Log.e(TAG,s+""); }});

5.flatmap操作符
flatMap操作符接收一個Observable的輸出作為輸入,同時輸出另外一個Observable。在flatMap操作符中,我們可以做一系列的事情,然后輸出的新的Observable,這個Observable是我們在Subscriber想要接收的。

Observable.create(new Observable.OnSubscribe<List<String>>() { @Override public void call(Subscriber<? super List<String>> subscriber) { String [] strs={"1","2","3","4","5","6","7"}; subscriber.onNext(Arrays.asList(strs)); }}) .flatMap(new Func1<List<String>, Observable<?>>() { @Override public Observable<?> call(List<String> list) { return Observable.from(list); }}) .subscribe(new Action1<Object>() { @Override public void call(Object o) { Log.e(TAG,o.toString()); }});

首先Observable發出一個list , 然后經過flatmap 將其變成from創建的Observable,這個Observable將list中的元素一個一個的發射,然后,subcriber 中接收。

運行程序:

6.filter 操作符,對Observable發射的數據進行過濾操作,哪有subcriber接收 ,哪些不接收。

Observable.create(new Observable.OnSubscribe<List<String>>() { @Override public void call(Subscriber<? super List<String>> subscriber) { String [] strs={"1","2","3","4","5","6","7"}; subscriber.onNext(Arrays.asList(strs)); }}) .flatMap(new Func1<List<String>, Observable<?>>() { @Override public Observable<?> call(List<String> list) { return Observable.from(list); }}) .filter(new Func1<Object, Boolean>() {//filter 操作符,去掉“1”; @Override public Boolean call(Object o) { if(o.toString().equals("1"))return false; return true; }}) .subscribe(new Action1<Object>() {@Override public void call(Object o) { Log.e(TAG,o.toString()); }});

運行程序:

7.take操作符,固定返回數量。take(2),返回2個結果。

Observable.create(new Observable.OnSubscribe<List<String>>() { @Override public void call(Subscriber<? super List<String>> subscriber) { String [] strs={"1","2","3","4","5","6","7"}; subscriber.onNext(Arrays.asList(strs)); }}) .flatMap(new Func1<List<String>, Observable<?>>() { @Override public Observable<?> call(List<String> list) { return Observable.from(list); }}) .filter(new Func1<Object, Boolean>() {//filter 操作符,去掉“1”; @Override public Boolean call(Object o) { if(o.toString().equals("1"))return false; return true; }}) .take(2) .subscribe(new Action1<Object>() {//take 操作符,最多輸出的數量 @Override public void call(Object o) { Log.e(TAG,o.toString()); }});

運行程序:

rxjava中還有很多操作符,具體見官網文檔和中文文檔,操作符可以讓你對數據流做任何操作。多個操作符配合起來,可以讓很復雜的邏輯變得簡單,同時,在操作數據的過程中,subcriber并不需要知道中間做了那些操作,只需要知道返回的結果,操作數據也變的簡單。

源碼下載

優秀文章推薦:

  • 史上最簡單的 SpringCloud 教程 | 終章
  • 史上最簡單的 SpringCloud 教程 | 第一篇: 服務的注冊與發現(Eureka)
  • 史上最簡單的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

轉載于:https://www.cnblogs.com/forezp/p/9852195.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的一篇RxJava友好的文章(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。