2017-02-04 97 views
2

我是rxJava中的新成員。RxJava過濾器運算符

那麼,我正在測試幾個例子來整合運算符在rxJava中。 所以,我有這樣一個問題:

Observable.just("JUAN", "LUCILA", "ARMANDO").map(new Function<String, Integer>() { 
     @Override 
     public Integer apply(String s) throws Exception { 
      return s.length(); 
     } 
    }).all(new Predicate<Integer>() { 
     @Override 
     public boolean test(Integer integer) throws Exception { 
      return integer > 0; 
     } 
    }).filter(new Predicate<Boolean>() { 
     @Override 
     public boolean test(Boolean aBoolean) throws Exception { 
      return aBoolean; 
     } 
    }).subscribe(new Observer<Boolean>() { 
     @Override 
     public void onSubscribe(Disposable d) { 

     } 

     @Override 
     public void onNext(Boolean value) { 
      Log.d("STATUS: ", "OK"); 
     } 

     @Override 
     public void onError(Throwable e) { 

     } 

     @Override 
     public void onComplete() { 
      Log.d("STATUS: ", "COMPLETE"); 
     } 
    }) 

所以,AndroidStudio標誌着我對認購(新觀察)錯誤。 我的目標是根據長度將名稱轉換爲數字,所以我希望做出一個條件,顯然它會是真的,並且遲到,從過濾器過濾TRUE,然後向我顯示一條日誌消息,說OK!

我希望你能幫助我! 謝謝!

回答

1

檢查Singlehttp://reactivex.io/RxJava/2.x/javadoc/

正如評論Observable.all(...)說你有型Single然後從Single.filter(...)你有型Maybe

所以用你需要toObservable()然後訂閱。

@CheckReturnValue 
@SchedulerSupport(SchedulerSupport.NONE) 
public final Maybe<T> filter(Predicate<? super T> predicate) { 
    ObjectHelper.requireNonNull(predicate, "predicate is null"); 
    return RxJavaPlugins.onAssembly(new MaybeFilterSingle<T>(this, predicate)); 
} 

`

更改爲

Observable.just("JUAN", "LUCILA", "ARMANDO").map(new Function<String, Integer>() { 
      @Override 
      public Integer apply(String s) throws Exception { 
       return s.length(); 
      } 
     }).all(new Predicate<Integer>() { 
      @Override 
      public boolean test(Integer integer) throws Exception { 
       return integer > 0; 
      } 
     }).filter(new Predicate<Boolean>() { 
      @Override 
      public boolean test(Boolean aBoolean) throws Exception { 
       return aBoolean; 
      } 
     }).toObservable().subscribe(new Observer<Boolean>() { 
      @Override 
      public void onSubscribe(Disposable d) { 

      } 

      @Override 
      public void onNext(Boolean value) { 
       Log.d("STATUS: ", "OK"); 
      } 

      @Override 
      public void onError(Throwable e) { 

      } 

      @Override 
      public void onComplete() { 
       Log.d("STATUS: ", "COMPLETE"); 
      } 
     }); 
+1

我相信在'單在'Observable.all(...)'的類型更改爲'Single',然後'Maybe'。過濾器(...)'。由於'Observable.filter(...)'返回'Observable'。 – Kiskae

+0

@Kiskae是它根據來源 – Raghunandan

+0

好的,那是有效的。謝謝@Raghunandan – Juandqt