Rxjava實踐之路[初級篇]
前言
本章主要講過濾,如何從發射的Observable中選取想要的內容以及學會更多有用的處理技巧。
正題
1、filter
-
篩選符合條件的內容
/**
- 篩選符合條件的內容
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
- @return
*/
private void filterObservable(){
// 使用filter方法過濾內容中不需要的值
Observable.just("A1","B1","A2","C3").filter(new Func1<String, Boolean>() {
}).subscribe(new Action1<String>() {@Override public Boolean call(String s) { // 條件篩選以“A”開始的內容 return s.startsWith("A"); }
}); }</code></pre> 運行結果如下:@Override public void call(String s) { // 打印結果 System.out.println("ddddddddddddddddddd filter s = " + s); }
09-18 14:32:29.978 25356-25356/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddddddd filter s = A1 09-18 14:32:29.978 25356-25356/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddddddd filter s = A2
2、take
</li> -
篩選出原始數據中前n個數據發射
/**
- 篩選出原始數據中前n個數據發射
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
- @return
*/
private void takeObservable(){
// take(n) 提取原數據前n個數據發射
Observable.just("1","2","3","4","5").take(4).subscribe(new Action1<String>() {
}); }</code></pre>@Override public void call(String s) { // 打印結果 System.out.println("ddddddddddddddd take s = " + s); }
運行結果如下:
09-18 14:46:21.894 424-424/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddd take s = 1 09-18 14:46:21.894 424-424/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddd take s = 2 09-18 14:46:21.894 424-424/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddd take s = 3 09-18 14:46:21.895 424-424/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddd take s = 4
3、takelast
</li> -
篩選出原始數據中從倒數前n個數據發射
/**
- 篩選出原始數據中從倒數前n個數據發射
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
- @return
*/
private void takeLastObservable(){
// takeLast(n) 提取原數據倒數前n個數據發射
Observable.just("1","2","3","4","5").takeLast(2).subscribe(new Action1<String>() {
}); }</code></pre> </li> </ul>@Override public void call(String s) { // 打印結果 System.out.println("dddddddddddddddddd takeLast s = " + s); }
4、distinct
-
去掉數據中重復值
/**
- 去掉數據中重復值
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
- @return
*/
private void distinctObservable(){
// 將發射數據重復五遍再去重復
Observable.just("A1","A1","B1","C1","D1","B1","A1").repeat(5).distinct().subscribe(new Action1<String>() {
}); }</code></pre> 運行結果如下:@Override public void call(String s) { // 打印結果 System.out.println("ddddddddddddddddd distinct s = " + s); }
09-18 14:54:35.616 6187-6187/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddddd distinct s = A1 09-18 14:54:35.616 6187-6187/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddddd distinct s = B1 09-18 14:54:35.617 6187-6187/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddddd distinct s = C1 09-18 14:54:35.617 6187-6187/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddddd distinct s = D1
5、skip
</li> -
篩選出原始數據中前n個數據跳過不發射
/**
- 篩選出原始數據中前n個數據跳過不發射
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
- @return
*/
private void skipObservable(){
// skip(n) 提取原數據前n個數據跳過不發射
Observable.just("1","2","3","4","5").skip(4).subscribe(new Action1<String>() {
}); }</code></pre> 運行結果如下:@Override public void call(String s) { // 打印結果 System.out.println("ddddddddddddddd skip s = " + s); }
09-18 15:04:10.187 11687-11687/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddd skip s = 5
6、skiplast
-
篩選出原始數據中從倒數前n個數據跳過不發射
/**
- 篩選出原始數據中從倒數前n個數據跳過不發射
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
- @return
*/
private void skipLastObservable(){
// takeLast(n) 提取原數據倒數前n個數據跳過不發射
Observable.just("1","2","3","4","5").skipLast(2).subscribe(new Action1<String>() {
}); }</code></pre> 運行結果如下:@Override public void call(String s) { // 打印結果 System.out.println("dddddddddddddddddd skipLast s = " + s); }
09-18 15:05:31.576 11687-11687/cn.jianke.rxjavafilterdemo I/System.out: dddddddddddddddddd skipLast s = 1 09-18 15:05:31.577 11687-11687/cn.jianke.rxjavafilterdemo I/System.out: dddddddddddddddddd skipLast s = 2 09-18 15:05:31.578 11687-11687/cn.jianke.rxjavafilterdemo I/System.out: dddddddddddddddddd skipLast s = 3
7、timeout
</li> -
在指定的時間間隔內Observable不發射值的話,監聽的原始的Observable時就會觸發onError()函數
/**
- 在指定的時間間隔內Observable不發射值的話,監聽的原始的Observable時就會觸發onError()函數
- @author leibing
- @createTime 2016/09/18
- @lastModify 2016/09/18
- @param
@return */ private void timeoutObservable(){ // 指定4秒后再發射,再指定3秒后如果未發射就觸發onError函數 Observable.just("1","2").timer(4, TimeUnit.SECONDS).timeout(3, TimeUnit.SECONDS).subscribe(
new Observer<Long>() { @Override public void onCompleted() { System.out.println("dddddddddddddddd timeout onCompleted = "); } @Override public void onError(Throwable e) { System.out.println("dddddddddddddddd timeout e = " + e.getMessage()); } @Override public void onNext(Long aLong) { System.out.println("dddddddddddddddd timeout along = " + aLong); }
}); }</code></pre>
運行結果如下:
09-18 15:28:34.142 25661-25812/cn.jianke.rxjavafilterdemo I/System.out: dddddddddddddddd timeout e = null
demo地址: RxjavaFilterDemo
來自:http://www.jianshu.com/p/a7b2142ceffa
-
-
本文由用戶 AurPye 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!