【问题标题】:RxJava access item downstreamRxJava 访问项下游
【发布时间】:2016-12-07 22:04:03
【问题描述】:

我已将几个rx 运算符链接在一起以执行多项任务。我需要从下游的父流中的对象访问字段。

即。如何访问channel.uid 下游?

createThing(panel) // Observable<~>
    .flatMapSingle(
            channel -> {
        return createOrUpdateItem(channel);
    })
    .flatMapCompletable(
            item -> {
        return linkItemToChannel(item.name, /* need access to channel.uid here */ channel.uid);
    });

【问题讨论】:

    标签: java java-8 reactivex rx-java2


    【解决方案1】:

    使用Observable.flatmap(Function mapper, BiFunction resultSelector)(或Flowable 版本)。例如:

    createThing(panel) //I assume that this method returns Observable
        .flatMap(channel -> createOrUpdateItem(channel).toObservable(),
                (channel, item) -> linkItemToChannel(item.name, channel.uid).toObservable())
        .toCompletable();
    

    flatMapSingleflatMapCompletable 没有类似的覆盖方法,因此您必须将 SingleCompletable 转换为 Observable(或 Flowable)。或者您可以编写自己的运算符;)

    【讨论】:

      【解决方案2】:

      添加到@maxost 的答案,这里可以避免最后一个toCompletable()toObservable()

      createThing(panel)
      .flatMap(new Function<Channel, ObservableSource<? extends Item>>() {
                   @Override public ObservableSource<? extends Item> apply(Channel channel) throws Exception {
                       return createOrUpdateItem(channel).toObservable();
                   }
               },
              new BiFunction<Channel, Item, Completable>() {
                  @Override public Completable apply(Channel channel, Item item) throws Exception {
                      return linkItemToChannel(item.name, channel.uid);
                  }
              }
      )
      .ignoreElements() // converts to Completable
      

      Lambda 的:

      createThing(panel)
      .flatMap(channel -> createOrUpdateItem(channel).toObservable(),
              (channel, item) -> linkItemToChannel(item.name, channel.uid))
      .ignoreElements() // converts to Completable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-03
        • 2018-02-02
        相关资源
        最近更新 更多