成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RxJava操作符系列三(下)

移動開發(fā)
ElementAt操作符獲取原始Observable發(fā)射的數(shù)據(jù)序列指定索引位置的數(shù)據(jù)項,然后當(dāng)做自己的唯一數(shù)據(jù)發(fā)射。給它傳遞一個基于0的索引值,它會發(fā)射原始Observable數(shù)據(jù)序列對應(yīng)索引位置的值,如果你傳遞給elementAt的值為4,那么它會發(fā)射第5項的數(shù)據(jù)。

[[180593]]

接上文

Take

Take操作符可以修改Observable的行為,只返回前面的N項數(shù)據(jù),然后發(fā)射完成通知,忽略剩余的數(shù)據(jù)。

  1. Observable.range(1,8) 
  2.  
  3.           .take(4) 
  4.  
  5.           .subscribe(new Subscriber<Integer>() { 
  6.  
  7.         @Override 
  8.  
  9.         public void onNext(Integer item) { 
  10.  
  11.            Log.e(TAG, "Next: " + item); 
  12.  
  13.         } 
  14.  
  15.   
  16.  
  17.         @Override 
  18.  
  19.         public void onError(Throwable error) { 
  20.  
  21.             Log.e(TAG, "Error: " + error.getMessage()); 
  22.  
  23.         } 
  24.  
  25.   
  26.  
  27.         @Override 
  28.  
  29.         public void onCompleted() { 
  30.  
  31.            Log.e(TAG, "complete."); 
  32.  
  33.         } 
  34.  
  35.     });  

輸出日志信息

  1. Next: 1 
  2.  
  3. Next: 2 
  4.  
  5. Next: 3 
  6.  
  7. Next: 4 
  8.  
  9. complete  

take和skip一樣也有其它兩個重載方法take(long time, TimeUnit unit),take(long time, TimeUnit unit, Scheduler scheduler),默認在computation調(diào)度器上執(zhí)行。

take還有變體操作符TakeLast,takeLastBuffer具體執(zhí)行效果可自行代碼。

Debounce

該操作符指的是過了一段指定的時間還沒發(fā)射數(shù)據(jù)時才發(fā)射一個數(shù)據(jù),聽著可能有點繞。你可以理解對源Observable間隔期產(chǎn)生的結(jié)果進行過濾,如果在這個規(guī)定的間隔期內(nèi)沒有別的結(jié)果產(chǎn)生,則將這個結(jié)果提交給訂閱者,否則忽略該結(jié)果,原理有點像光學(xué)防抖

上代碼 

  1. Observable.range(1,8) 
  2.  
  3.           .take(4) 
  4.  
  5.           .subscribe(new Subscriber<Integer>() { 
  6.  
  7.         @Override 
  8.  
  9.         public void onNext(Integer item) { 
  10.  
  11.            Log.e(TAG, "Next: " + item); 
  12.  
  13.         } 
  14.  
  15.   
  16.  
  17.         @Override 
  18.  
  19.         public void onError(Throwable error) { 
  20.  
  21.             Log.e(TAG, "Error: " + error.getMessage()); 
  22.  
  23.         } 
  24.  
  25.   
  26.  
  27.         @Override 
  28.  
  29.         public void onCompleted() { 
  30.  
  31.            Log.e(TAG, "complete."); 
  32.  
  33.         } 
  34.  
  35.     });  

輸出信息

  1. onNext: 4 
  2.  
  3. onNext: 5 
  4.  
  5. onNext: 6 
  6.  
  7. onNext: 7 
  8.  
  9. onNext: 8 
  10.  
  11. onNext: 9 
  12.  
  13. onCompleted:  

這個輸出數(shù)據(jù)不一定一樣,有可能從5開始。

Distinct

這個比較好理解,它就是過濾掉重復(fù)的數(shù)據(jù),只允許還沒有發(fā)射過的數(shù)據(jù)項通過。

示例代碼

  1. Observable.just(0, 0, 6, 4, 2, 8, 2, 1, 9, 0) 
  2.  
  3.                 .distinct() 
  4.  
  5.                 .subscribe(new Subscriber<Integer>() { 
  6.  
  7.                     @Override 
  8.  
  9.                     public void onCompleted() { 
  10.  
  11.                         Log.e(TAG, "onCompleted:Distinct "); 
  12.  
  13.                     } 
  14.  
  15.   
  16.  
  17.                     @Override 
  18.  
  19.                     public void onError(Throwable e) { 
  20.  
  21.                         Log.e(TAG, "onError:Distinct "); 
  22.  
  23.                     } 
  24.  
  25.   
  26.  
  27.                     @Override 
  28.  
  29.                     public void onNext(Integer integer) { 
  30.  
  31.                         Log.e(TAG, "onNext:Distinct " + integer); 
  32.  
  33.                     } 
  34.  
  35.                 });  

輸出日志信息 

  1. onNext:Distinct 0 
  2.  
  3. onNext:Distinct 6 
  4.  
  5. onNext:Distinct 4 
  6.  
  7. onNext:Distinct 2 
  8.  
  9. onNext:Distinct 8 
  10.  
  11. onNext:Distinct 1 
  12.  
  13. onNext:Distinct 9 
  14.  
  15. onCompleted:Distinct  

ElementAt

該操作符獲取原始Observable發(fā)射的數(shù)據(jù)序列指定索引位置的數(shù)據(jù)項,然后當(dāng)做自己的***數(shù)據(jù)發(fā)射。給它傳遞一個基于0的索引值,它會發(fā)射原始Observable數(shù)據(jù)序列對應(yīng)索引位置的值,如果你傳遞給elementAt的值為4,那么它會發(fā)射第5項的數(shù)據(jù)。如下示例代碼

  1. Observable.just(0, 0, 6, 4, 2, 8, 2, 1, 9, 0) 
  2.  
  3.                 .elementAt(4) 
  4.  
  5.                 .subscribe(new Subscriber<Integer>() { 
  6.  
  7.                     @Override 
  8.  
  9.                     public void onCompleted() { 
  10.  
  11.                         Log.e(TAG, "onCompleted:ElementAt "); 
  12.  
  13.                     } 
  14.  
  15.   
  16.  
  17.                     @Override 
  18.  
  19.                     public void onError(Throwable e) { 
  20.  
  21.                         Log.e(TAG, "onError:ElementAt "); 
  22.  
  23.                     } 
  24.  
  25.   
  26.  
  27.                     @Override 
  28.  
  29.                     public void onNext(Integer integer) { 
  30.  
  31.                         Log.e(TAG, "onNext:ElementAt " + integer); 
  32.  
  33.                     } 
  34.  
  35.                 });  

輸出日志信息

  1. onNext:ElementAt 2 
  2.  
  3. onCompleted:ElementAt  

IgnoreElements

操作符抑制原始Observable發(fā)射的所有數(shù)據(jù),只允許它的終止通知(onError或onCompleted)通過,使用該操作符onNext()方法不會執(zhí)行。 

  1. Observable.just(1, 2, 3).ignoreElements().subscribe(new Subscriber() { 
  2.  
  3.            @Override 
  4.  
  5.            public void onCompleted() { 
  6.  
  7.                Log.e(TAG, "onCompleted"); 
  8.  
  9.            } 
  10.  
  11.  
  12.  
  13.            @Override 
  14.  
  15.            public void onError(Throwable e) { 
  16.  
  17.                Log.e(TAG, "onError"); 
  18.  
  19.            } 
  20.  
  21.  
  22.  
  23.            @Override 
  24.  
  25.            public void onNext(Integer integer) { 
  26.  
  27.                Log.e(TAG, "onNext"); 
  28.  
  29.            } 
  30.  
  31.        });  

執(zhí)行后只會輸出onCompleted。這個操作符效果就如同empty()方法創(chuàng)建一個空的Observable,只會執(zhí)行onCompleted()方法,不同的是ignoreElements是對數(shù)據(jù)源的處理,而empty()是創(chuàng)建Observable。 

責(zé)任編輯:龐桂玉 來源: 安卓開發(fā)精選
相關(guān)推薦

2016-12-28 09:54:50

AndroidRxJava操作符

2017-01-03 15:56:20

RxJava操作符Android

2016-12-28 09:48:09

AndroidRxJava操作符

2016-11-17 15:35:51

RxJava操作Subscriber

2009-08-19 17:26:28

C# 操作符

2021-10-31 18:59:55

Python操作符用法

2010-07-14 14:55:07

Perl操作符

2009-11-17 10:42:58

PHP操作符

2011-04-08 16:26:14

JavaScript

2010-07-14 14:30:31

Perl操作符

2010-07-19 11:00:24

Perl操作符

2009-09-15 17:16:58

LINQ查詢操作符

2012-02-06 09:13:23

LINQ

2009-09-16 09:09:23

Linq Contai

2010-07-14 14:18:51

Perl操作符

2009-07-21 09:31:00

Scala操作符

2010-01-28 11:16:28

C++操作符

2009-07-14 18:34:22

Jython操作符重載

2010-07-13 11:11:39

Perl標(biāo)量

2009-11-30 16:48:08

PHP操作符
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品欧美一区二区三区 | 999视频在线播放 | 久久青草av | 日日夜夜av | 麻豆久久久久久久 | 亚洲精品免费在线观看 | 久久小视频 | 激情欧美一区二区三区 | 日本久草| 91高清在线观看 | 自拍偷拍中文字幕 | 国产综合欧美 | 亚洲人在线观看视频 | 一区二区三区欧美在线观看 | 亚洲一区 | 久久亚洲视频 | 欧美日韩在线综合 | 2018国产精品| 99久久婷婷国产精品综合 | 男女羞羞视频大全 | 偷拍自拍网站 | 91影视 | 99久久婷婷国产综合精品电影 | 国产在线精品一区二区 | 中文字幕爱爱视频 | 国产婷婷色一区二区三区 | 欧美8一10sex性hd | 999视频 | 成人久久18免费网站麻豆 | 婷婷久久精品一区二区 | 免费视频一区二区三区在线观看 | 国产色片在线 | 久久毛片 | 国产精品一区二区三区在线 | 国产精品一区二区在线免费观看 | 久久久精品天堂 | 欧美亚洲在线视频 | 亚洲精品中文字幕在线观看 | 国产精品一区二区欧美黑人喷潮水 | 国产偷录叫床高潮录音 | 久久视频精品 |