Rxjava實踐之路[初級篇]

AurPye 8年前發布 | 5K 次閱讀 RxJava Java開發

前言

本章主要講過濾,如何從發射的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>() {
       @Override
       public Boolean call(String s) {
           // 條件篩選以“A”開始的內容
           return s.startsWith("A");
       }
      
      }).subscribe(new Action1<String>() {
       @Override
       public void call(String s) {
           // 打印結果
           System.out.println("ddddddddddddddddddd filter s = " + s);
       }
      
      }); }</code></pre> 運行結果如下:
      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>() {
       @Override
       public void call(String s) {
           // 打印結果
           System.out.println("ddddddddddddddd take s = " + s);
       }
      
      }); }</code></pre>

      運行結果如下:

      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>() {
       @Override
       public void call(String s) {
           // 打印結果
           System.out.println("dddddddddddddddddd takeLast s = " + s);
       }
      
      }); }</code></pre> </li> </ul>

      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>() {
         @Override
         public void call(String s) {
             // 打印結果
             System.out.println("ddddddddddddddddd distinct s = " + s);
         }
        
        }); }</code></pre> 運行結果如下:
        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>() {
         @Override
         public void call(String s) {
             // 打印結果
             System.out.println("ddddddddddddddd skip s = " + s);
         }
        
        }); }</code></pre> 運行結果如下:
        09-18 15:04:10.187 11687-11687/cn.jianke.rxjavafilterdemo I/System.out: ddddddddddddddd skip s = 5
        </li> </ul>

        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>() {
           @Override
           public void call(String s) {
               // 打印結果
               System.out.println("dddddddddddddddddd skipLast s = " + s);
           }
          
          }); }</code></pre> 運行結果如下:
          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
          </li> </ul>

          demo地址: RxjavaFilterDemo

           

           

          來自:http://www.jianshu.com/p/a7b2142ceffa

           

 本文由用戶 AurPye 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!