当前位置: 首页 > 知识库问答 >
问题:

在RxJava中,链接可观察对象时如何传递变量?

从智明
2023-03-14

我正在使用RxJava链接异步操作,我想向下游传递一些变量:

Observable
   .from(modifications)
   .flatmap( (data1) -> { return op1(data1); })
   ...
   .flatmap( (data2) -> { 
       // How to access data1 here ?
       return op2(data2);
   })

这似乎是一种常见的模式,但我找不到有关它的信息。

共有3个答案

云宝
2023-03-14

flatmap可以使用第二个参数:

Observable.just("foo")
                .flatMap(foo -> Observable.range(1, 5), Pair::of)
                .subscribe(pair -> System.out.println("Result: " + pair.getFirst() + " Foo: " + pair.getSecond()));

资料来源:https://medium.com/rxjava-tidbits/rxjava-tidbits-1-use-flatmap-and-retain-original-source-value-4ec6a2de52d4

丁雅逸
2023-03-14

另一种可能性是将op1的结果映射到组织。阿帕奇。平民lang3.tuple。配对包含变量的,并传递:

Observable
   .from(modifications)
   .flatmap( (data1) -> {
       return op1(data1).map( obj -> { return Pair.of(data1,obj); });
   })
   ...
   .flatmap( (dataPair) -> { 
       // data1 is dataPair.getLeft()
       return op2(dataPair.getRight());
   })

它可以工作,但是将变量隐藏在Pair/Triple/中感觉有点不舒服...如果您使用Java6符号,它会变得非常冗长。

我想知道是否有更好的解决方案,也许一些RxJava操作员可以帮助?

从元明
2023-03-14

我从Couchbase论坛得到的建议是使用嵌套的可观察对象

Observable
    .from(modifications)
    .flatmap( (data1) -> { 
        return op1(data1)
            ...
            .flatmap( (data2) -> { 
                // I can access data1 here
                return op2(data2);
            })
        });

编辑:我会将此标记为公认答案,因为它似乎是最推荐的答案。如果处理太复杂,无法嵌套所有内容,也可以通过函数调用检查解决方案。

 类似资料:
  • 我对RxJava很陌生,每当我有一个情况,我需要从链上的一个可观察的返回数据传递到调用“订阅” - 我很难理解如何在没有任何补丁的情况下以“反应式”方式做到这一点...... 例如: 我想发出obs1和obs2,得到它们的结果,然后发出obs3然后obs4,然后以订阅结束链,同时可以访问obs1、obs2、obs3和obs4的结果。 调用的顺序很重要,我需要在执行obs3之前完成obs1和obs2

  • 我看到了很多关于让Rx延迟事件的每次发射的帖子:如何让RxJS可以观测到倒计时?,如何使用RxJava间隔运算符,在可观察项RxJava之间添加延迟,为发出的列表的每个项添加RxJava延迟,以及其他。 不过,我没有看到任何不同延迟的链接。 基本上,我有一个文本视图和一个字母列表,我想: 将文本设置为第一个字母 等待1500ms 将文本设置为null 等待500ms 将文本设置为第二个字母 等待1

  • 我正在开发利用RxJava、realm和改进的应用程序。 我需要创建非常具体的数据处理链。我需要在io调度程序上执行改装调用,然后在我的自定义单线程领域调度程序上处理提供的数据,然后将结果推送到主线程调度程序上的ui。我试图通过使用多个组合来实现这一点,包括观察(observeOn)和订阅(subscribeOn),但我无法让中间部分在调度程序(scheduler)上执行。 我的目标是这样的

  • 我使用的是RxJava和RxAndroid,我想将两个可观察到的东西结合起来,但在这两个东西之间,我需要更新UI,所以在到达订阅服务器之前,我必须在主线程中执行代码。 一个解决方案,而不是flatmapping(这是一个被接受的术语吗?)两个可观察到的,将是在更新UI之后在订阅服务器中调用下一个可观察到的,但我觉得应该有一个更优雅的解决方案,比如: 当然,很可能map不是我这里需要使用的运算符。那

  • 假设我有一个要转换为反应流的事件发出数据源。数据源由资源(例如,定期发送更新状态的套接字)绑定,所以我希望共享对该资源的单个订阅。使用带有回放的单个observable(新订阅者可以立即获得当前值)和refCount操作符似乎非常适合这样做。例如,这是他的MyDataProvider的外观: 然而,现在假设我有另一个数据源,它需要第一个数据源的结果来计算其自身的值: 在这里,我的设置开始崩溃。第一

  • 问题内容: 我对RxJava(和一般的Reactive范式)很陌生,所以请多多包涵。 假设我有这个和这个嵌套的数据结构: 并假设我有以下API端点: 现在,让我们假设: ** 现在,如果有的话,如何递归所有子项评论?即获得ID为[1,2,3,4,5,6]的评论? ** 我已经搜索并偶然发现了这个:https : //jkschneider.github.io/blog/2014/recursive