当前位置: 首页 > 面试题库 >

RxJava:如何有条件地将运算符应用于Observable而不中断链

云季萌
2023-03-14
问题内容

我在RxJava上有一连串的运算符。我希望能够根据布尔值应用两个运算符之一,而不会“破坏链”。

我是Rx(Java)的新手,我觉得这样做可能比我目前引入临时变量的方法更具惯用性和可读性。

这是一个具体示例,如果批处理大小字段为非空,则从可观察项中缓冲项目,否则使用发出单个无边界大小的批处理toList()

Observable<Item> source = Observable.from(newItems);
Observable<List<Item>> batchedSource = batchSize == null ?
                source.toList() :
                source.buffer(batchSize);
return batchedSource.flatMap(...).map(...)

这样的事情可能吗?(伪lambdas,因为Java):

Observable.from(newItems)
    .applyIf(batchSize == null,
             { o.toList() },
             { o.buffer(batchSize) })
    .flatMap(...).map(...)

问题答案:

您可以compose(Func1)用来保持顺序但可以自定义行为

source
.compose(o -> condition ? o.map(v -> v + 1) : o.map(v -> v * v))
.filter(...)
.subscribe(...)


 类似资料:
  • 主要内容:RxJava 条件运算符 介绍,RxJava 条件运算符 示例RxJava 条件运算符 介绍 以下是用于 Observable 的条件运算符。 运算符 描述 All 评估发出的所有项目以满足给定标准。 Amb 仅在给定多个 Observable 的情况下从第一个 Observable 发出所有项目。 Contains 检查 Observable 是否发出特定项目。 DefaultIfEmpty 如果 Observable 不发出任何内容,则发出默认项。 Se

  • 我还想用一个take(count)运算符使一个观察上述情况的观察者成为可观察的,如下所示: 我在执行上述代码时遇到NullPointerException,我知道原因。NPE是由于onNext的第二次调用导致在TakeObserver实例上执行onComplete,并且在onComplete方法内部调用未设置(null)的upStream.Dispose。TakeObserver的上游变量在订阅一

  • 我有一个rxJava2可观察对象,我想有条件地订阅它。场景i将进行网络调用,并且只有当设备连接到网络时才会调用。我想做下面的事情 有什么建议吗?有没有更好的办法?

  • 我正在学习RxJava运算符,我发现下面的这些代码没有打印任何东西: 作为ReactiveX, 创建一个可观察对象,该对象发出一系列以特定时间间隔隔开的整数 我是不是搞错了或者忘了什么?

  • 问题内容: 有人可以简单地向我解释什么是(有条件的“三元”)运算符,以及如何使用它? 问题答案: 这是if-else语句的单行缩写。它称为条件运算符。1个 这是可以通过条件运算符缩短的代码示例: 可以这样缩短: 与所有表达式一样,条件运算符也可以用作具有副作用的独立语句,尽管在缩小之外这是不常见的: 它们甚至可以链接: 但是要小心,否则最终将得到如下复杂的代码: 1 通常称为“三元运算符”,但实际

  • 问题内容: 当仅使用IN运算符时,以下查询工作正常 但是当我触发这个查询时,它给我一个空白的结果 我是在做错事还是其他人遇到了同样的问题? 问题答案: 我认为您必须将“ IN”条件放在括号中才能使其起作用: 它与N1QL处理器评估操作员的优先级有关 如果使用EXPLAIN关键字运行它,它将显示它如何相互链接条件。 例如 与