RxJava 操作符 take

[java]  view plain  copy
  1. Observable.interval(1, TimeUnit.SECONDS)  
  2.                   .take(10)  
  3.                   .subscribeOn(Schedulers.io())  
  4.                   .observeOn(AndroidSchedulers.mainThread())  
  5.                   .subscribe(new Subscriber() {  
  6.                     @Override public void onCompleted() {  
  7.                     }  
  8.   
  9.                     @Override public void onError(Throwable e) {  
  10.                     }  
  11.   
  12.                     @Override public void onNext(Long aLong) {  
  13.                     }  
  14.                   });  


take操作符和interval操作符联合使用,由于一旦interval计时开始除了解绑就无法停止,所以只有在onNext方法中计算一旦释放到10秒的时候再进行解绑从而终结该计时。但使用take操作符就简单很多了,它的意思是只释放前N项,和计时配合使用的话,就可以不用担心计时会一直执行,10秒过后它会自动结束。



[java]  view plain  copy
  1. /** 
  2.      * Returns an Observable that emits only the first {@code num} items emitted by the source Observable. 
  3.      * 

     

  4.      *  
  5.      * 

     

  6.      * This method returns an Observable that will invoke a subscribing {@link Observer}'s 
  7.      * {@link Observer#onNext onNext} function a maximum of {@code num} times before invoking 
  8.      * {@link Observer#onCompleted onCompleted}. 
  9.      * 
     
  10.      *  
    Scheduler:
     
  11.      *  
    This version of {@code take} does not operate by default on a particular {@link Scheduler}.
     
  12.      *  
  13.      *  
  14.      * @param num 
  15.      *            the maximum number of items to emit 
  16.      * @return an Observable that emits only the first {@code num} items emitted by the source Observable, or 
  17.      *         all of the items from the source Observable if that Observable emits fewer than {@code num} items 
  18.      * @see ReactiveX operators documentation: Take 
  19.      */  
  20.     public final Observable take(final int num) {  
  21.         return lift(new OperatorTake(num));  
  22.     }  

你可能感兴趣的:(Android笔记,RxJava,操作符,take)