Операторы RxJava или цепочка Котлина - PullRequest
0 голосов
/ 07 сентября 2018

Я выполняю рефакторинг устаревшего кода и хочу знать, является ли приведенный ниже код более эффективным, чем цепочка обычных операторов RxJava?

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

Спасибо

1 Ответ

0 голосов
/ 07 сентября 2018

Преимущество номер 1 в Rx - асинхронное выполнение и изменение потоков (если можно так сказать).Если вам это не нужно, то более эффективно использовать так называемые цепочки Котлина, поскольку каждая цепочка (каждый вызов метода) в цепочке Rx создает новые наблюдаемые, например:

.filter{ ... }

resultsв этом вызове метода, который создаст 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.

...