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

RxJava棘手的startWith(可观测)

阎唯
2023-03-14

下面的代码仅在观察2完成后才从观察1发出项。

observable1.startWith(observable2)
           .subscribe()

我需要实现另一种行为

observable1 ->       0   1   2   3
observable2 -> 1   2   3   4   5   6

observable1.startWithDefault(observable2)
            -> 1   2 0   1   2   3

第二个可观测对象仅发射项目,而第一个可观测对象为空,然后发射第一个可观测对象的项目。

我无法找到只使用基本运算符的正确解决方案,自定义运算符startWithDefault的正确RxJava 2实现应该是什么样子?

附笔。

observable1.subscribe()
observable2.takeUntil(observable1).subscribe()

由于种族原因,在可观察到立即发射的情况下,这不是正确的解决方案1

共有1个答案

宋洲
2023-03-14

方向是好的,但你需要发布(函数)共享观察1的信号,并且concatEager在开关应用时不会丢失其中的元素

observable1.publish(o -> 
    Observable.concatEager(observable2.takeUntil(o), o)
)
.subscribe(...)
 类似资料:
  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 在android 6.0.1 Samsung s6 Edge+上的测试 当device screen脱机并从debug中拔出时,可观察到的只是停止发射项目。如果设备打开,则开始发射对象。另一个问题是,在停止接收项目之前,我会按照相同项目的顺序随机地得到2/3个重复调用 ____________________________edit_________________________________

  • 我正在从事一个涉及Hystrix的项目,我决定使用RxJava。现在,忘记Hystrix的其余部分,因为我相信主要问题是我完全搞砸了正确编写可观察代码。 需要:我需要一种方法来返回一个代表多个可观察对象的可观察对象,每个可观察对象都运行一个用户任务。我希望该可观察对象能够返回任务的所有结果,甚至错误。 问题:可观测流会因错误而消亡。如果我有三个任务,而第二个任务引发了一个异常,那么即使第三个任务成

  • 我在创建一个将返回对象列表的可观察对象时遇到了麻烦。我有一个ID列表,想对我的数据库提出一个请求。在这种情况下,我使用的是Firebase。当得到一个结果时,我希望将这些对象中的每一个编译成一个列表,然后返回该列表。我需要在返回之前等待所有的对象都返回。我在我的视图模型反序列化器类中这样做。这是我的代码。 有几种方法可以从firebase数据库中返回数据,我可以返回Documentsnapshot

  • 问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。

  • 我做了一个RxJava2实验,包括以下步骤: 从对象列表创建一个可观察对象。 使用EquiMapSing()将可观察对象发出的每个项目映射到SingleSource。在平图单()中,对可观察对象发出的每个项目执行异步操作。 收集ListB中的所有项目,使用Observable.toList() 结果:由于异步操作,ListB的项目顺序与ListA不同。 因此,flatMapSingle()的工作原