首页 > 解决方案 > 基于 Single 值的条件流

问题描述

如何根据 Single 的值获得条件流?例如,在以下示例中,如果 getNextAction(nodeId) 导致空操作,我希望链结束,否则继续。每个方法都返回 Single,而不是 Observable。显然,过滤器只适用于 Observables。

          getNextAction(nodeId)
           .flatMap(action -> {
               if (action.isEmpty()) {
                   sendResponse("");
               }
               return Single.just(action);
           })
           //.filter(action -> !action.isEmpty())
           .flatMap(action -> prepareAction(action, nodeId)
            .subscribe(response -> sendResponse(transform(response)));

标签: reactive-programmingrx-java2

解决方案


一种方法可能是:

  1. flatMapgetNextAction()成一个的结果Completable
  2. 检查动作以立即完成流,或组成一组要完成的动作(例如准备动作并发送响应)

可能看起来像这样:

getNextAction(nodeId)
    .flatMapCompletable(action -> {
      if(action.isEmpty()) {
        return Completable.complete();
      } else {
        return Completable.fromAction(() -> {
          // prepareAction()...
          // sendResponse()...
        });
      }
    })
    .subscribe(
        ()    -> System.out.println("## onComplete()"),
        error -> System.out.println("## onError(" + error.getMessage() + ")")
    );

(以上假设getNextAction()返回 a Single<String>

如果不出意外,我希望它能激发一些想法。


推荐阅读