我正在重构旧代码,我想知道下面的代码是否比常规的RxJava操作员链更有效?
Observable.just(collection.getItems().asSequence()
.filter { it.itemId == null }
.filter { it.anotherProp == prop }.toList())
谢谢
答案 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是最佳选择。