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

RxJava 2-可观察。flatMapSingle澄清

王辉
2023-03-14

我做了一个RxJava2实验,包括以下步骤:

  1. 从对象列表创建一个可观察对象。
  2. 使用EquiMapSing()将可观察对象发出的每个项目映射到SingleSource。在平图单()中,对可观察对象发出的每个项目执行异步操作。
  3. 收集ListB中的所有项目,使用Observable.toList()

结果:由于异步操作,ListB的项目顺序与ListA不同。

因此,flatMapSingle()的工作原理似乎与flatMap()类似,因为它使用了merge操作符,并且不能保证元素的顺序将得到保留。

我的结论正确吗?文档没有涵盖我,关于这种行为的讨论也不存在。

共有1个答案

邓鸿雪
2023-03-14

flatMap不能保证按照评论中提到的@akarnokd订购。

如果您想保证排序,可以使用concatMap,但它只允许您与内部可观察的连接。RxJava1和RxJava2中似乎都没有concatMapSingle的版本。但是,您可以通过自己使用toObservable()将内部单个转换为可观察的来解决此问题,并将其与以下concatMap一起使用(用Kotlin编写的代码)。

Observable
    .fromIterable(listA)
    .concatMap { single.toObservable() }
    .toList() // Items in the list has same order of listA

请注意,还有一个concatmapagenger,它将急切地订阅一个内部的可观察的(或上例中的单个),这可能有助于改进并行化任务。

 类似资料:
  • 问题内容: 我一直在寻找新的rx java 2,但我不确定我是否已经明白了这个主意… 我知道我们所拥有的并没有支持。 因此,基于例如,可以说我有有: 在大约128个值之后,这将崩溃,这很明显我消耗的速度比获取项目要慢。 但是,我们有相同的 即使我延迟使用它,它仍然完全不会崩溃。为了工作,可以说我放了一个运算符,崩溃已经消失了,但并不是所有值都被发出。 因此,我目前在脑海中找不到答案的基本问题是,为

  • 我一直在看新的rx java 2,我不太确定我是否理解了< code >背压的概念... 我知道我们有没有支持的和有背压。 因此,基于示例,假设我有与: 这将在大约128个值之后崩溃,很明显,我的消费速度比获取物品要慢。 但是< code>Observable也是如此 这将不会崩溃,即使我把一些消费延迟,它仍然工作。为了使< code >可流动工作,假设我将< code>onBackpressur

  • 问题内容: 据我了解,RxJava2 创建了另一个Observable,它仅包含原始Observable中的一个元素。这 绝不能 丢,因为它是由效果过滤掉一个例外,因为它是发生第二次。 如 以下 代码段所示 输出量 我的问题: 我理解它正确吗? 到底是什么导致了异常。 如何从消费者那里解决呢? 问题答案: 是的,但是因为可观察到的“结束”并不意味着内部运行的代码已停止。为了在这种情况下完全安全,您

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?

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