【问题标题】:RxJava operators or Kotlin chainRxJava 运算符或 Kotlin 链
【发布时间】:2018-09-07 15:57:50
【问题描述】:

我正在重构遗留代码,我想知道下面的代码是否比常规的 RxJava 运算符链更有效?

Observable.just(collection.getItems().asSequence()
            .filter { it.itemId == null }
            .filter { it.anotherProp == prop }.toList())

谢谢

【问题讨论】:

  • 为什么不filter { it.itemId == null || it.anotherProp == prop }
  • @ReneFerrari 是的,它可以像你提议的那样。但问题是这样写是不是一个好方法(just() 中的 kotlin 链)

标签: android kotlin rx-java


【解决方案1】:

Rx 的第一大优势是异步执行和线程变化(如果你可以这样说的话)。如果你不需要它,那么使用你所说的 Kotlin 链会更高效,因为 Rx 链中的每个链(每个方法调用)都会创建新的 observable,例如:

.filter{ ... }

导致此方法调用,这将创建ObservableFilter

@CheckReturnValue
@SchedulerSupport(SchedulerSupport.NONE)
public final Observable<T> filter(Predicate<? super T> predicate) {
    ObjectHelper.requireNonNull(predicate, "predicate is null");
    return RxJavaPlugins.onAssembly(new ObservableFilter<T>(this, predicate));
}

另一方面,Kotlin .filter{...} 运算符使用内联函数

public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
    return filterTo(ArrayList<T>(), predicate)
}

我想说的是,如果您需要更改线程或异步执行一些链式调用,或者如果您的整个系统都建立在 Rx 之上,那么 Rx 是最好的选择。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多