2017-02-04 57 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