RxJava运算符或Kotlin链

时间:2018-09-07 07:13:19

标签: android kotlin rx-java

我正在重构旧代码,我想知道下面的代码是否比常规的RxJava操作员链更有效?

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

谢谢

1 个答案:

答案 0 :(得分:2)

Rx的第一优势是异步执行和线程更改(如果可以这样说的话)。如果您不需要它,那么使用所谓的Kotlin链会更有效,因为它导致Rx链中的每个链(每个方法调用)都创建了新的可观察对象,例如:

.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是最佳选择。